代码之家  ›  专栏  ›  技术社区  ›  Kashif

在sql中将varchar meridienm时间改为24小时

  •  0
  • Kashif  · 技术社区  · 15 年前

    我有这类数据

    alt text http://img46.imageshack.us/img46/6351/timed.png

    timeofday列是varchar。我想在24小时内更改这个时间,使用sql,并更新twentyfourrtime列。twentyfourhourtime列也是varchar。

    我怎么能这么做。

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Josh    15 年前

    我已经写了这个测试-看起来很有效。与午夜一起工作并添加前导零。

    更新:

    DROP TABLE #times
    
    CREATE TABLE #times
    (
        TimeOfDay  VARCHAR(32),
        TimeMeridiem VARCHAR(32),
        TwentyFourHourTime VARCHAR(32)
    )
    
    INSERT INTO #times (TimeOfDay, TimeMeridiem) VALUES ('1:00', 'PM')
    INSERT INTO #times (TimeOfDay, TimeMeridiem) VALUES ('1:00', 'AM')
    INSERT INTO #times (TimeOfDay, TimeMeridiem) VALUES ('12:00', 'PM')
    
    UPDATE #times SET TwentyFourHourTime = REPLACE(Right(Replicate('0',5) +
    REPLACE((SELECT CASE WHEN TimeMeridiem = 'PM' THEN
    CAST((SELECT REPLACE(TimeOfDay,':','.')) AS dec(10,2)) + 12 ELSE 
    (SELECT REPLACE(TimeOfDay,':','.')) END), '24.', '00.') ,5), '.', ':')
    
    SELECT * FROM #times
    

    结果:

    TimeOfDay TimeMeridiem TwentyFourHourTime 
    --------- ------------ ------------------ 
    1:00      PM           13:00              
    1:00      AM           01:00              
    12:00     PM           00:00  
    
        2
  •  0
  •   Wael Dalloul    15 年前

    请尝试以下查询:

    update tableName set  TwentyFourHourTime =
    case TimeMeridiem 
    WHEN 'PM' THEN Convert(varchar,dateadd(hour,12,TimeOFDay),108)
     ELSE Convert(varchar,TimeOFDay,108)
    end