PHP 中的 MSSQL 日期时间无法正常工作

Posted

技术标签:

【中文标题】PHP 中的 MSSQL 日期时间无法正常工作【英文标题】:MSSQL datetime between in PHP doesn't work correctly 【发布时间】:2015-12-18 15:10:22 【问题描述】:

这是在 Dbvisualizer 中运行良好但在 php 脚本中无法运行的示例代码。

select
convert(varchar, oh.date,101),
oh.id
from oh
where oh.state=1 and convert(varchar,oh.date,104) between '17.12.2015' and '17.12.2015'
order by oh.id desc,date desc

在 Dbvisualizer 中它返回选定日期范围内的行,但在 php 中它返回表中的所有记录。 mssql.datetimeconvert 没有影响。哪里出了问题?

【问题讨论】:

【参考方案1】:

首先,不要将日期转换为 varchar 来执行字符串比较。让 SQL Server 将您的日期字符串转换为日期,以便进行日期比较。其次,您的 BETWEEN 列出了相同的日期,因此返回的唯一记录将从 2015 年 12 月 17 日午夜开始。这个 SQL 会更好:

select convert(varchar, oh.date,101), oh.id
from oh
where oh.state=1 and   oh.date between '2015-12-17' and '2015-12-17'
order by oh.id desc,date desc

如果这不起作用,您可以发布您的 PHP 代码吗?

【讨论】:

如果我不将日期转换为字符串,它将使用我不需要的时间戳,所以在这种情况下,我应该使用该时间段来选择第 17 天的记录(在'2015-12-17'和'2015-12-18'之间)这是第一,第二,无论如何这不能解决问题,在Dbvis代码中工作很好,即使没有转换,但在PHP中,没有转换它没有' t 完全选择行。完整的 PHP 代码无济于事,SQL 查询相同。因为问题或在 SQL 配置或 PHP-SQL 中。使用 mssql.datetimeconvert 影响如下: mssql.datetimeconvert=开启日期如下:2015 年 12 月 20 日 10:52:38:633PM mssql.datetimeconvert=关闭如下:2015-12-20 22:52:38 带有转换的代码: select convert(varchar, oh.date,101), oh.id from oh where oh.state=1 and convert(varchar,oh.date,104) between '17.12.2015' and '17.12.2015' order by oh.id desc,date desc 结果 DbVis : 12 月 17 日的所有记录 结果 PHP : 表中的所有记录 没有转换的代码: select convert(varchar, oh.date,101), oh.id from oh where oh.state=1 and oh.date between '17.12.2015' and '18.12.2015' order by oh.id desc,date desc 结果 DbVis : 12 月 17 日的所有记录 结果 PHP : 空结果 最终我可以通过按年、月和日分解日期来解决我的问题,并将其放在 SQL where 子句中。但它有点像狗钉子。它必须是更自然和漂亮的解决方案

以上是关于PHP 中的 MSSQL 日期时间无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

报告中的日期范围,由于查询而无法正常工作

通过 PHP 显示时 MSSQL 查询中的日期转换不起作用

where 子句中的日期时间条件无法正常工作

RTL 布局中的引导日期选择器无法正常工作

从 PHP 中的输入表单获取日期

Logstash 日期过滤器无法正常工作