简单的DateTime sql查询

如何查询一定范围内的DateTime数据库字段?

我正在使用SQL SERVER 2005

下面的错误代码

SELECT * FROM TABLENAME WHERE DateTime >= 12/04/2011 12:00:00 AM AND DateTime <= 25/05/2011 3:53:04 AM 

请注意,我需要在一定的时间范围内获得行。 例如,10分钟的时间范围。

目前SQL在“12”附近语法错误返回。“

你错过了单引号:

 SELECT * FROM TABLENAME WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM' 

此外,build议使用ISO8601格式YYYY-MM-DDThh:mm:ss.nnn [Z],因为这不取决于您的服务器的本地文化。

 SELECT * FROM TABLENAME WHERE DateTime >= '2011-04-12T00:00:00.000' AND DateTime <= '2011-05-25T03:53:04.000' 

你需要引用你想要作为date传递的string,你也可以在这里使用BETWEEN:

  SELECT * FROM TABLENAME WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM' 

有关如何在指定格式时显式将string转换为date的示例,请参阅以下问题的答案:

Sql Serverstring到date的转换

这在SQL Server 2005和2008中都适用于我:

 SELECT * from TABLE WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'} AND FIELDNAME < {ts '2013-08-05 00:00:00.000'} 

打开正试图导出SQL数据的访问文件。 删除那里的任何查询。 每次运行SQL Server导入向导时,即使失败,也会在Access数据库中创build一个必须删除的查询,然后才能再次运行SQL导出向导。

其他人已经说过,SQL Server中的date文字需要用单引号括起来,但是我想补充一点,你可以用两种方法来解决你的月/日混合问题(也就是25个月被看作是5个月的问题)天) :

  1. 使用显式Convert(datetime, 'datevalue', style)其中style是数字样式代码之一,请参阅Cast and Convert 。 style参数不仅用于将date转换为string,还用于确定如何将stringparsing为date。

  2. 为string存储的date使用与区域无关的格式。 我使用的是'yyyymmdd hh:mm:ss',或者考虑ISO格式, yyyy-mm-ddThh:mi:ss.mmm 。 根据实验,没有其他语言不变的格式string。 (尽pipe我认为你可以在最后join时区,请看上面的链接)。

 SELECT * FROM TABLENAME WHERE [DateTime] >= '2011-04-12 12:00:00 AM' AND [DateTime] <= '2011-05-25 3:35:04 AM' 

如果这不起作用,请将您的桌面脚本编出来并张贴在这里。 这将帮助我们迅速得到正确的答案。

 select getdate() O/P ---- 2011-05-25 17:29:44.763 select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM' O/P --- 22/06/1432 5:29:44:763PM