我有下表:
ID myDate myTime Value
1 2014-06-01 00:00:00 100
2 2014-06-01 01:00:00 125
3 2014-06-01 02:00:00 132
4 2014-06-01 03:00:00 139
5 2014-06-01 04:00:00 145
6 2014-06-01 05:00:00 148
FF.
24 2014-06-01 23:00:00 205
25 2014-06-02 00:00:00 209
26 2014-06-02 01:00:00 215
27 2014-06-02 02:00:00 223
然后我有以下SQL语句:
SELECT * FROM MyTable WHERE myDate = '2014-06-01'
UNION ALL
SELECT * FROM MyTable WHERE myDate = DATEADD(dd, 1, '2014-06-01') AND myTime = '00:00:00'
因此结果应该是从记录号1到记录号25。
我要做的是在最后一条记录上myTime
值为00:00:00
,需要更改为24:00:00
。
有谁知道怎么做?或者不可能?
谢谢。
答案 0 :(得分:1)
您可以使用SQL Server的简单IIF功能:http://msdn.microsoft.com/en-au/library/hh213574.aspx
所以查询将如下所示
SELECT
ID,
myDate,
IIF(myTime='00:00:00', '24:00:00', myTime) as myTime
FROM MyTable WHERE myDate = '2014-06-01'
如果它回答了您的问题,请标记为答案
更新: 如果它是sql server 2008或更早版本,你可以使用case .. when
SELECT ID,
myDate,
case when CAST(myTime AS VARCHAR(8))='00:00:00' then '24:00:00'
else CAST(myTime AS VARCHAR(8))
end as myTimeTemp
FROM MyTable WHERE myDate = '2014-06-01'
UNION ALL
SELECT ID,
myDate,
case when CAST(myTime AS VARCHAR(8))='00:00:00' then '24:00:00'
else CAST(myTime AS VARCHAR(8))
end as myTimeTemp
FROM MyTable WHERE myDate = DATEADD(dd, 1, '2014-06-01') AND myTime = '00:00:00'
答案 1 :(得分:0)
一对评论。首先,您是否将日期和时间存储在不同的列中?似乎可以简化为存储在单个列中。
无论如何,在这种情况下不需要UNION ALL
,简单的OR
语句会返回您正在寻找的结果。
要回答你的问题,如果你想在00:00到24:00之间更新最后的结果,这样的事情应该可以完成,而不需要OR
或UNION
:
UPDATE MyTable
SET mytime = '24:00:00'
WHERE myDate = DATEADD(dd, 1, '2014-06-01') AND myTime = '00:00:00'
如果您对日期进行硬编码(仅使用'2014-06-02'),则无需DATEADD
,但我认为它是传入的变量。
编辑,根据您的意见,这应该使用CASE
声明:
SELECT ID,
myDate,
CASE WHEN myDate = DATEADD(day, 1, '2014-06-01')
THEN DATEADD(hour, 24, myTime)
ELSE myTime
End newMyTime,
Value
FROM MyTable
WHERE mydate = '2014-06-01' OR
(myDate = DATEADD(day, 1, '2014-06-01') AND myTime = '00:00:00')
答案 2 :(得分:0)
您可以使用or
:
SELECT *
FROM MyTable
WHERE myDate = '2014-06-01' OR
(myDate = DATEADD(dd, 1, '2014-06-01') AND myTime = '00:00:00');
编辑:
SELECT date('2014-06-01') as mydate,
(case when mydate <> date('2014-06-01') then '24:00:00' else mytime end) as mytime,
REST OF COLUMNS HERE
FROM MyTable
WHERE myDate = '2014-06-01' OR
(myDate = DATEADD(dd, 1, '2014-06-01') AND myTime = '00:00:00');