首页 > 解决方案 > 在特定日期和时间之后获取数据,但日期和时间在 SQL Server 的不同列中

问题描述

在此名为 Test 的表中,我无法在分隔符日期和时间之后获取数据:

列和样本数据:

ID 日期 小时
1 20091220 23:10:23
2 20201020 10:10:25
3 20101020 15:10:27

我尝试了以下方法:

SELECT *
FROM test
WHERE Date > 20090101
  AND Hour > '15:22:33'

和:

SELECT a.id
FROM
    (SELECT * FROM test 
     WHERE Date >= 20090101) AS a
WHERE a.Hour>= '15:22:33'

然而,这两个查询都返回了这个结果:

ID 日期 小时
1 20091220 23:10:23

当预期结果是所有行时,因为所有数据都在 2009/01/01 之后。我知道问题是小时分隔符但是我无法解决这个问题

我目前正在使用 SQL Server Management Studio v18

标签: sqlsql-server

解决方案


将日期时间存储在单个列中可能会更好。但我认为你想要的逻辑是:

SELECT *
FROM test
WHERE Date > 20090102 OR
      (Date = 20090102 AND Hour > '15:22:33')

这将返回日期在 20090102 15:22:343 之后的所有行。

或者,您可以将其表述为:

WHERE CONVERT(datetime, CONCAT(date, ' ', hour)) > '2009-01-02 15:22:33'

这个版本实际上建议使用计算列对表进行修改:

alter table test add column date_hour as
    ( CONVERT(datetime, CONCAT(date, ' ', hour)) );

然后你可以写:

where date_hour > '2009-01-02 15:22:33'

并且您可以在列上创建索引date_hour以提高性能。


推荐阅读