简单的DateTime SQL查询


83

如何查询一定范围内的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'附近。”


2
clyc的答案是正确的:您需要添加引号。我以前犯过这个错误,因为如果您这样做where date = 1/12/2011,那么它似乎可以工作,但实际上将2011年1月1日除以零,然后将零作为最小可能的datetime值。
约翰·吉布

Answers:


116

您错过了单引号:

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

另外,建议使用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'

消息242,级别16,状态3,行1不能正常工作将char数据类型转换为datetime数据类型会导致超出范围的datetime值。
奥雅纳

@overule-尝试使用第二个示例
Alex Aza

@overule-同样,请确保您的列具有日期时间类型。
亚历克斯·阿扎

3
@Eric-yyyymmdd没有时间。
亚历克斯·阿扎

8

您需要在要传递给日期的字符串周围加上引号,也可以在此处使用BETWEEN:

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

有关如何在指定格式时将字符串显式转换为日期的示例,请参见以下问题的答案:

SQL Server字符串到日期的转换


与上述相同的错误。消息242,级别16,状态3,第1行从char数据类型到datetime数据类型的转换导致datetime值超出范围。我真的很困惑。
奥雅纳

哦,我只是复制了您的日期时间,您的日期是25/05,但可能是预期的月/日期,因此请同时切换两者。我编辑了答案,并在此处链接到一个很好的问题,该问题显示了如何将字符串明确转换为日期
Milimetric 2011年

6

这在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'}


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

如果这不起作用,请编写表格脚本并将其张贴在此处。这将帮助我们迅速为您提供正确的答案。


1
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

1

其他人已经说过,SQL Server中的日期文字需要用单引号引起来,但是我想补充一点,您可以通过两种方式解决月/日混合问题(即,将25视为月份而将5视为月份的问题)。天) :

  1. Convert(datetime, 'datevalue', style)在样式是数字样式代码之一的地方使用显式形式,请参阅Cast和Convert。style参数不仅用于将日期转换为字符串,还用于确定如何将字符串解析为日期。

  2. 对于存储为字符串的日期,请使用与区域无关的格式。我使用的是“ yyyymmdd hh:mm:ss”,或者考虑使用ISO格式yyyy-mm-ddThh:mi:ss.mmm。根据实验,没有其他语言不变的格式字符串。(尽管我认为您可以在最后加入时区,请参见上面的链接)。


0

打开您要导出SQL数据的访问文件。删除那里的所有查询。每次运行SQL Server导入向导时,即使失败,它也会在Access DB中创建一个查询,必须先删除该查询,然后才能再次运行SQL导出向导。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.