Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php调用MSSQL查询并比较两个日期?_Php_Sql Server_Date - Fatal编程技术网

php调用MSSQL查询并比较两个日期?

php调用MSSQL查询并比较两个日期?,php,sql-server,date,Php,Sql Server,Date,好了,我有点困了,需要一些帮助 我正在从我的linux服务器调用一个外部MSSQL(不是MySQL)数据库,并在今天之后显示结果。代码如下: $today = date("Y-m-d");// current date $date = strtotime(date("Y-m-d", strtotime($today))); $todaysDate = date( 'M j Y g:i:s:000A', $date ); //converts it for MSSQL standards $qu

好了,我有点困了,需要一些帮助

我正在从我的linux服务器调用一个外部MSSQL(不是MySQL)数据库,并在今天之后显示结果。代码如下:

$today = date("Y-m-d");// current date
$date = strtotime(date("Y-m-d", strtotime($today)));
$todaysDate = date( 'M j Y g:i:s:000A', $date ); //converts it for MSSQL standards

$query = "select DateofArrival from aTable where DateofArrival > '". $todaysDate ."'";
当我运行查询时,它会显示所有结果,甚至不会给出一个关于WHERE的提示

我猜这是因为它将日期与字符串进行比较?不过我不完全确定

有什么想法吗?提前谢谢你

更新:这是回显的查询字符串

$query = "select DateofArrival from aTable where DateofArrival > 'Jan 10 2012 12:00:00:000AM'";
数据库中存储的日期示例:

Feb 28 2004 12:00:00:000AM
Oct 14 2009 12:00:00:000AM
May 18 2011 12:00:00:000AM
Apr 10 2012 12:00:00:000AM

T-SQL/MSSQL使用标准的军用格式,您会看到“M j Y g:i:s:000A”格式,因为您使用的是一个软件,它可以将输出转换为适合您的系统或数据库的语言环境,我不确定是哪一种

我可以肯定的是,当比较MSSQL中的日期时,就像在任何其他系统中一样,总是使用

Y-m-d G:i:s
格式。这就是数据库存储数据的方式,以及在您输入或比较数据时它希望提供数据的方式


我在VB6+MSSQL中工作了5年,所以我向您确认。。。在VB6中没有什么特别之处,我必须自己学习这种格式。

我可以肯定的是,当比较MSSQL中的日期时,就像在任何其他系统中一样,总是使用

Y-m-d G:i:s
格式。这就是数据库存储数据的方式,以及在您输入或比较数据时它希望提供数据的方式


我在VB6+MSSQL中工作了5年,所以我向您确认。。。在VB6中没有什么特别之处,我必须自己学习格式。

不要在PHP端设置日期格式,因为您应该考虑到您的web服务器和sql服务器不在同一时区。相反,只需进行以下查询:

$query = "select DateofArrival from aTable where DateofArrival > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))"
编辑

在中,日期似乎以字符串形式存储在数据库中。在这种情况下,您应该执行此查询

$query = "select DateofArrival from aTable where convert(datetime, DateofArrival, 109) > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))"

不要在PHP端格式化日期,因为您应该考虑web服务器和sql服务器不在同一时区。相反,只需进行以下查询:

$query = "select DateofArrival from aTable where DateofArrival > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))"
编辑

在中,日期似乎以字符串形式存储在数据库中。在这种情况下,您应该执行此查询

$query = "select DateofArrival from aTable where convert(datetime, DateofArrival, 109) > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))"


使用
echo$query进行调试
并自己运行该命令。可能您的日期格式错误。您是否尝试直接在SSMS中运行查询以查看结果?另外,您是否检查了$todaysDate的值以确保它符合您的预期?MS SQL是否更喜欢
mm/dd/yyyy g:i:s
?我已用显示的内容和显示的内容更新了原始帖子。除非我遗漏了什么,否则比较似乎很好并自己运行该命令。可能您的日期格式错误。您是否尝试直接在SSMS中运行查询以查看结果?另外,您是否检查了$todaysDate的值以确保它符合您的预期?MS SQL是否更喜欢
mm/dd/yyyy g:i:s
?我已用显示的内容和显示的内容更新了原始帖子。除非我遗漏了什么,否则这些比较似乎很好。。。我明白你的意思。虽然我试了一下,但它还是吐出了所有的东西。。。。奇怪吧?那就意味着你的DateofArraival大于当前日期:)你能从结果集中给出几行吗?是否真的有DateofArrivall小于或等于当前日期的记录?这是在上面更新的原始帖子中。您将看到之前的日期和之后的日期。但是,它仍然显示所有日期。是的,我想显示到达日期在当前日期之后的所有记录,而不显示之前的任何记录。它只是不起作用。哈哈。。。我明白你的意思。虽然我试了一下,但它还是吐出了所有的东西。。。。奇怪吧?那就意味着你的DateofArraival大于当前日期:)你能从结果集中给出几行吗?是否真的有DateofArrivall小于或等于当前日期的记录?这是在上面更新的原始帖子中。您将看到之前的日期和之后的日期。但是,它仍然显示所有日期。是的,我想显示到达日期在当前日期之后的所有记录,而不显示之前的任何记录。它只是不起作用。lold
G:i:s
也起作用吗?我一直假设并使用了
H:I:s
(免责声明:我没有专门使用MSSQL)。我认为它是有效的,因为我从来没有用前导0格式化我的小时数,但我可能又弄错了。最坏的情况是最坏的,实际上用户应该使用H而不是G,但不要使用“H”或“G”,因为它们是12小时格式。对于MYSQL,我总是使用G:i:s,它适用于您的信息:)嗯,很有趣!那么你是说linux服务器正在自动转换数据库中存储的数据?即使我做了一个直接的回显,我也得到了2011年5月18日12:00:00:000AMNo,返回API正在这样做,但是数据库中的信息格式不是这样的。。。选择数据时,可以使用CONVERT()更改日期的格式。(有关更多信息,请参阅)如果要更改会话的默认格式,可以使用SET-DATEFIRST更改连接的默认格式(请参阅)G:i:s是否也起作用?我一直假设并使用了
H:I:s
(免责声明:我没有专门使用MSSQL)。我认为它是有效的,因为我从来没有用前导0格式化我的小时数,但我可能又弄错了。最坏的情况是最坏的,实际上用户应该使用H而不是G,但不要使用“H”或“G”,因为它们是12小时格式。对于MYSQL,我总是使用G:i:s,它适用于您的信息:)嗯,很有趣!那么你是说linux服务器正在自动转换数据库中存储的数据?即使我做了一个直道