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 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

OPENJSON 在 SQL Server 中不起作用?

更新存储过程在 SQL Server 中不起作用

Ctrl R 在 SQL Server 2012 中不起作用

本地主机在 sql server 2005 中不起作用

Intellisense 在 SQL Server Management Studio 中不起作用。可能是啥原因?

SQL-创建表在 SQL Server Management Studio SSMS 中不起作用