获取 getdate() 的前 n 个字符
get the first n characters of getdate()
我有一个案例比较日期,日期时间列的小时和当前日期,小时
select * from tbl where LEFT(EVENT_TIME_column,13) !=LEFT(GETDATE(),13)
EVENT_TIME_column
格式为'2019-08-15 12:32:40.0000000'
当我执行 LEFT(GETDATE(),13)
结果是 'Aug 15 2019'
你能建议如何在 '2019-08-15 12'
(日期和时间)
中获得 GETDate()
不要对 date/time 值使用字符串函数!有非常好的内置函数:
where convert(date, event_time_column) = convert(date, getdate()) and
datepart(hour, event_time_column) = datepart(hour, getdate())
如果你不关心索引的使用,那就用datediff()
:
where datediff(hour, event_time_column, getdate()) = 0
您可以通过以下 2 个单独的比较来检查这一点。这是为了检查日期和小时部分是否与日期和小时部分相同,如果 GETDATE() 与否。
WHERE CAST(EVENT_TIME_column AS DATE) = CAST(GETDATE() AS DATE)
AND DATEPART(HH,EVENT_TIME_column) = DATEPART(HH,GETDATE())
要检查 NOT EQUAL TO,只需将 = 符号替换为 != 符号即可。
此外,如果我猜对了,您只是在尝试避免从 运行 小时至今的记录。如果是这种情况,您还可以使用以下逻辑过滤数据-
WHERE EVENT_TIME_column < DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
如果你想要格式 yyyy-MM-dd hh
那么可以这样做:
SELECT CONVERT(varchar(13),GETDATE(),120);
您可以在文档中找到 CONVERT
的所有样式代码的完整列表:Date and Time Styles
但是,您似乎想检查日期是否在当前小时内。那将是:
WHERE EVENT_TIME_column >= DATEADD(HOUR, DATEDIFF(HOUR, 0,GETDATE()),0)
AND EVENT_TIME_column < DATEADD(HOUR, DATEDIFF(HOUR, 0,GETDATE())+1, 0)
这明确避免了列上的任何函数 EVENT_TIME_column
;这将使查询不可 SARGable。
我有一个案例比较日期,日期时间列的小时和当前日期,小时
select * from tbl where LEFT(EVENT_TIME_column,13) !=LEFT(GETDATE(),13)
EVENT_TIME_column
格式为'2019-08-15 12:32:40.0000000'
当我执行 LEFT(GETDATE(),13)
结果是 'Aug 15 2019'
你能建议如何在 '2019-08-15 12'
(日期和时间)
GETDate()
不要对 date/time 值使用字符串函数!有非常好的内置函数:
where convert(date, event_time_column) = convert(date, getdate()) and
datepart(hour, event_time_column) = datepart(hour, getdate())
如果你不关心索引的使用,那就用datediff()
:
where datediff(hour, event_time_column, getdate()) = 0
您可以通过以下 2 个单独的比较来检查这一点。这是为了检查日期和小时部分是否与日期和小时部分相同,如果 GETDATE() 与否。
WHERE CAST(EVENT_TIME_column AS DATE) = CAST(GETDATE() AS DATE)
AND DATEPART(HH,EVENT_TIME_column) = DATEPART(HH,GETDATE())
要检查 NOT EQUAL TO,只需将 = 符号替换为 != 符号即可。
此外,如果我猜对了,您只是在尝试避免从 运行 小时至今的记录。如果是这种情况,您还可以使用以下逻辑过滤数据-
WHERE EVENT_TIME_column < DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
如果你想要格式 yyyy-MM-dd hh
那么可以这样做:
SELECT CONVERT(varchar(13),GETDATE(),120);
您可以在文档中找到 CONVERT
的所有样式代码的完整列表:Date and Time Styles
但是,您似乎想检查日期是否在当前小时内。那将是:
WHERE EVENT_TIME_column >= DATEADD(HOUR, DATEDIFF(HOUR, 0,GETDATE()),0)
AND EVENT_TIME_column < DATEADD(HOUR, DATEDIFF(HOUR, 0,GETDATE())+1, 0)
这明确避免了列上的任何函数 EVENT_TIME_column
;这将使查询不可 SARGable。