sql - 在特定日期和时间之后获取数据,但日期和时间在 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
解决方案
将日期时间存储在单个列中可能会更好。但我认为你想要的逻辑是:
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
以提高性能。
推荐阅读
- c# - 如何创建从模型到视图的男性和女性列表
- python - 如何将数组保存到 csv 文件而不将其转换为字符串?
- javascript - 我正在将一个对象转换为该数组,但无法获得由键和数组中的值组成的预期数组,我错在哪里?
- c - 我的 CS50 径流问题代码有什么问题?
- c# - C# XML 如何序列化对象的子集以及序列化的属性子集由配置文件驱动
- r - R:`select()` 不处理列表
- c++ - 从哪里开始部署 C++ 代码?
- c - STM32F107 通过代码 HAL 进行读出保护
- postman - 邮递员没有与本地主机连接
- javascript - 单击后退按钮 Instantclick.io 后,Javascript 执行两次