简单的日期时间 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 查询的主要内容,如果未能解决你的问题,请参考以下文章