SQL 查询中的时间范围
Time Range in SQL Query
查询结果:my query result
select distinct information.ID, information.Name,information.Time AS OvertimeOff
From Information
where information.Time >='18:00:00' AND information.Time <='20:00:00';
这是我的查询。我的 table 没有介于给定范围之间的值。而且没有结果。所以,我需要的是,如果范围内没有匹配项,我需要将该列的值设置为“00:00:00”。我怎样才能在查询中做到这一点?
更新
根据我们在评论中的讨论,您需要一些比简单的 case 表达式更复杂的东西。我建议的解决方案涉及使用 common table expression,以及 case 表达式和 where 子句:
;WITH cte As
(
SELECT id
FROM Information
WHERE Time >= '18:00:00' AND Time <= '20:00:00'
)
SELECT DISTINCT information.ID,
information.Name,
CASE WHEN NOT EXISTS(SELECT 1 FROM cte WHERE cte.Id = information.ID) THEN
'00:00:00'
ELSE
information.Time
END AS OvertimeOff
FROM Information
WHERE
(
information.Time >= '18:00:00'
AND information.Time <= '20:00:00'
)
OR NOT EXISTS(SELECT 1 FROM cte WHERE cte.Id = information.ID);
细分:
cte只是用来缩短子查询(因为它是
在 case 表达式和 where 子句中相同。
where 子句的 NOT EXISTS
部分确保您只获取记录
'00:00:00' 如果没有时间在 '18:00:00' 之间的记录
和“20:00:00”。
case表达式现在测试是否有记录
对于时间范围内的 ID,以及那个时间的 returns。如果不,
它 returns '00:00:00'
第一个版本
假设我理解正确,您需要从 where 子句中删除条件并将其放在 select 子句中的 case 表达式中。
像这样:
SELECT DISTINCT information.ID,
information.Name,
CASE WHEN information.Time >='18:00:00' AND information.Time <='20:00:00' THEN
information.Time
ELSE
'00:00:00'
END AS OvertimeOff
FROM Information;
查询结果:my query result
select distinct information.ID, information.Name,information.Time AS OvertimeOff
From Information
where information.Time >='18:00:00' AND information.Time <='20:00:00';
这是我的查询。我的 table 没有介于给定范围之间的值。而且没有结果。所以,我需要的是,如果范围内没有匹配项,我需要将该列的值设置为“00:00:00”。我怎样才能在查询中做到这一点?
更新
根据我们在评论中的讨论,您需要一些比简单的 case 表达式更复杂的东西。我建议的解决方案涉及使用 common table expression,以及 case 表达式和 where 子句:
;WITH cte As
(
SELECT id
FROM Information
WHERE Time >= '18:00:00' AND Time <= '20:00:00'
)
SELECT DISTINCT information.ID,
information.Name,
CASE WHEN NOT EXISTS(SELECT 1 FROM cte WHERE cte.Id = information.ID) THEN
'00:00:00'
ELSE
information.Time
END AS OvertimeOff
FROM Information
WHERE
(
information.Time >= '18:00:00'
AND information.Time <= '20:00:00'
)
OR NOT EXISTS(SELECT 1 FROM cte WHERE cte.Id = information.ID);
细分:
cte只是用来缩短子查询(因为它是 在 case 表达式和 where 子句中相同。
where 子句的
NOT EXISTS
部分确保您只获取记录 '00:00:00' 如果没有时间在 '18:00:00' 之间的记录 和“20:00:00”。case表达式现在测试是否有记录 对于时间范围内的 ID,以及那个时间的 returns。如果不, 它 returns '00:00:00'
第一个版本
假设我理解正确,您需要从 where 子句中删除条件并将其放在 select 子句中的 case 表达式中。
像这样:
SELECT DISTINCT information.ID,
information.Name,
CASE WHEN information.Time >='18:00:00' AND information.Time <='20:00:00' THEN
information.Time
ELSE
'00:00:00'
END AS OvertimeOff
FROM Information;