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

时间:2012-01-10 18:44:57

标签: 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

$query = "select DateofArrival from aTable where DateofArrival > '". $todaysDate ."'";

当我运行查询时,它显示所有结果,甚至没有给出关于WHERE的飞行声。

我猜这是因为它将日期与字符串进行比较?虽然不完全肯定。

有什么想法?提前谢谢!

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

$query = "select DateofArrival from aTable where DateofArrival > 'Jan 10 2012 12:00:00:000AM'";

存储在db中的日期示例:

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

2 个答案:

答案 0 :(得分:0)

T-SQL / MSSQL使用标准的军事格式,你会看到" M j Y g:i:s:000A"格式,因为您使用的软件转换输出以适应您的系统的区域设置或数据库的区域设置,我不知道哪一个。

我确切知道的是,在比较MSSQL中的日期时,就像在任何其他系统中一样,始终使用

Y-m-d G:i:s

格式。这就是数据库存储数据的方式以及在输入或比较时它希望如何提供数据。

我已经在VB6 + MSSQL中完成了5年的工作,所以我肯定地证实了这一点......在VB6中没什么好看的,我必须自己学习这种格式。

答案 1 :(得分:0)

不要在PHP端格式化日期,因为您应该考虑到您的Web服务器和SQL Server不在同一时区。相反,只需进行此查询:

$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()))"