DateTime 在 SQL Server 中不起作用
Posted
技术标签:
【中文标题】DateTime 在 SQL Server 中不起作用【英文标题】:DateTime in not working in SQL Server 【发布时间】:2011-10-08 20:46:34 【问题描述】:我试图从我的数据库中获取特定日期之后的所有记录。为此,我正在使用查询
SELECT *
FROM Events_tbl
WHERE lastupdated > '07-18-2011' and Venue=8
这段特殊的代码在我的本地主机中运行。但是当我上传到服务器时,它没有返回任何东西。有人可以帮忙吗?
我真的被困住了。
在我的 SQL Server 数据库中,日期时间值为
2011-07-19 19:37:50.727
我在英国使用 pipeten 服务器。我正在研究 asp.net c#
谢谢
【问题讨论】:
您确定服务器保存的日期是 2011 年 7 月 18 日之后的日期吗? 最有可能运行 SQLServer 的排序规则,您应该使用 convert:msdn.microsoft.com/de-de/library/ms187928.aspx 明确指定日期时间的格式,而不是让 SQLServer 猜测... 【参考方案1】:我建议您首先不要对查询使用文本格式 - 使用 parameterized query 并将参数值指定为 DateTime
。这样一来,您根本无需担心格式问题,而且您的代码远离数据。
您没有理由在此处执行与文本之间的转换 - 所以不要。将值保留在最合适的数据类型中。
(顺便说一句,这适用于所有数据值 - 参数化查询也有助于保护您免受 SQL 注入攻击。)
【讨论】:
+1 即使 mysql 的肮脏小秘密在于它将所有参数化查询转换为 .NET 驱动程序中的文本:)【参考方案2】:使用 ISO 日期格式 (YYYYMMDD) 它在所有语言中都是安全的
SELECT * from Events_tbl where lastupdated > '20110718' and Venue=8
【讨论】:
【参考方案3】:where 子句中的日期是美国日期格式,但您的服务器在英国。因此,您需要交换子句中的月份和日期。在英国,是 dd/mm/yyyy 而不是 mm/dd/yyyy
【讨论】:
或者更好的是:使用 ISO-8601 格式 (YYYYMMDD
),它独立您的服务器的区域设置和区域设置是什么。 ....【参考方案4】:
很可能您的本地机器本地化与服务器本地化不同,也可以通过使用字符串文字来查看您提出的请求。您的列是 varchar 格式还是 DateTime 格式?
顺便说一句,使用日期时间值总是使用特殊的操作数/函数。喜欢:
Msdn: DateTime
问候。
【讨论】:
以上是关于DateTime 在 SQL Server 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Ctrl R 在 SQL Server 2012 中不起作用