简单的日期时间 sql 查询

Posted

技术标签:

【中文标题】简单的日期时间 sql 查询【英文标题】:Simple DateTime sql query 【发布时间】:2011-05-25 03:57:07 【问题描述】:

如何查询一定范围内的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' 附近的语法不正确。"

【问题讨论】:

clyc 的答案是正确的:您需要添加引号。我以前犯过这个错误,因为如果你以where date = 1/12/2011 为例,它会看似工作,但实际上除以 1/12/2011 并得到零,然后将零视为最小值可能的日期时间值。 【参考方案1】:

你错过了单引号:

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'

【讨论】:

效果不佳 Msg 242, Level 16, State 3, Line 1 将 char 数据类型转换为 datetime 数据类型导致 datetime 值超出范围。 @overule - 尝试使用第二个示例 @overule - 另外,请确保您的列具有日期时间类型。 @Eric - yyyymmdd 没有时间。【参考方案2】:

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

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

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

Sql Server string to date conversion

【讨论】:

与上述相同的错误。消息 242,级别 16,状态 3,第 1 行 将 char 数据类型转换为 datetime 数据类型导致超出范围的 datetime 值。我真的很困惑。 哦,我刚刚复制了您的日期时间,您的日期时间是 25/05,但它可能需要月份/日期,因此请切换它们。我编辑了我的答案并链接到一个关于 SO 的好问题,该问题显示了如何将字符串显式转换为日期【参考方案3】:

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

【讨论】:

【参考方案4】:

你可以执行下面的代码

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14

【讨论】:

【参考方案5】:
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

如果这不起作用,请编写您的表格并在此处发布。这将帮助我们快速为您提供正确答案。

【讨论】:

【参考方案6】:
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

【讨论】:

【参考方案7】:

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

    使用显式 Convert(datetime, 'datevalue', style),其中 style 是数字样式代码之一,请参阅 Cast and Convert。 style 参数不仅用于将日期转换为字符串,还用于确定如何将字符串解析为日期。

    对存储为字符串的日期使用与区域无关的格式。我使用的是 'yyyymmdd hh:mm:ss',或者考虑 ISO 格式,yyyy-mm-ddThh:mi:ss.mmm。根据实验,没有其他语言不变的格式字符串。 (虽然我认为您可以在末尾包含时区,请参阅上面的链接)。

【讨论】:

【参考方案8】:

打开您尝试将 SQL 数据导出到的 Access 文件。删除那里的任何查询。每次运行 SQL Server 导入向导时,即使失败,它也会在 Access DB 中创建一个查询,在您再次运行 SQL 导出向导之前必须将其删除。

【讨论】:

以上是关于简单的日期时间 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

日期格式的 Oracle SQL 查询

sql 查询时间、日期范围内的数据

SQL时间转换脚本查询列表

从日期中选择特定记录的 SQL 查询

SQL Server 日期查询,年月作为单独的列

SQL中按日期进行查询,如何截取日期进行查询