日期:2014-05-17  浏览次数:20634 次

这样的“时间”应该怎样更新???



将“MyDateTime字段”减去“1”。比如,“2008101801”表示的是“2008年10月18日01时”,现在想将“MyDateTime字段”都减去一小时。

也就是“2008101801”变为“2008101800”,“2008101802”变为“2008101801”,“2008101803”变为“2008101802”,  这样的处理语句应该怎样写???
------最佳解决方案--------------------
IF OBJECT_ID('test1') IS NOT NULL 
    DROP TABLE test1 ;
CREATE TABLE test1
    ( 
ID INT,
MyDateTime NVARCHAR(22)
    )
     
INSERT  INTO test1  
        SELECT  1,'2008101800'
        UNION
        SELECT  2,'2008101801'
        UNION
        SELECT  3,'2008101802'
        UNION
        SELECT  4,'2008101803'

IF NOT OBJECT_ID('#a') IS NOT NULL 
    DROP TABLE #a
SELECT  ID ,
        MyDateTime ,
        DATEADD(HOUR
, CONVERT(INT, RIGHT(MyDateTime, 2)),CONVERT(DATETIME, LEFT(MyDateTime, 8))
) AS 'datetime' ,
        CONVERT(NVARCHAR(30)
, DATEADD(HOUR, -1,DATEADD(HOUR,CONVERT(INT, RIGHT(MyDateTime, 2)),CONVERT(DATETIME, LEFT(MyDateTime,8))))
, 20) AS 'reduce'
INTO    #a
FROM    test1

SELECT * FROM #a

SELECT  ID,
MyDateTime,
LEFT(REPLACE(REPLACE(reduce,'-',''),' ',''),10)
FROM    #a

------其他解决方案--------------------
update TB set MyDateTime=LEFT(MyDateTime,len(MyDateTime)-2)+right('00'+cast(cast(RIGHT(MyDateTime,2) as int)-1 as varchar(2)),2)
------其他解决方案--------------------
update table set MyDateTime = cast(cast(mydatetime as int) - 1 as varchar(20))
------其他解决方案--------------------
update table 
set mydatetime=cast(cast(mydatetime)as int)-1 as varchar(20))
go
------其他解决方案--------------------
Case  when...
------其他解决方案--------------------
谢谢各位大师。