在SQL中将24小时制转换为12小时制

时间:2019-02-01 16:03:22

标签: sql sql-server

我对SQL还是很陌生,已经阅读了许多转换问题,试图遵循语法准则,但实际上对此处的操作感到茫然。

我的0 True 1 True 2 False dtype: bool 语句成功地将24小时时间转换为12小时,当我尝试使用CASE语句将分号添加到结果时间时,就会出现问题。结果IF变量产生一个@newtime,我希望它仅创建一个结果,而不是两个。

在Windows NT 5.2(内部版本3790:Service Pack 2)上运行Microsoft SQL Server 2000-8.00.760标准版

NULL

3 个答案:

答案 0 :(得分:0)

尝试使用SQL Server格式

您的整数似乎已划分为HHMM,因此自午夜起,可以使用一些数学运算将其拆分为分钟。然后可以将分钟数添加到时间零,转换为日期,然后保留时间部分。我认为这应该在SQL Server 2000中有效:

DECLARE @current24hrtime as int;
SET @current24hrtime = 0;

SELECT LTRIM(RIGHT(CONVERT(varchar(55),dateadd(minute,60 * floor(@current24hrtime / 100) + @current24hrtime % 60,cast(0 as datetime)), 100), 7));

答案 1 :(得分:0)

在2000年无法测试,但是您可以尝试。

SELECT @newtime = RIGHT(CONVERT(VARCHAR(20),CAST(CAST(@current24hrtime / 100 as VARCHAR) + ':' 
    + RIGHT('0' + CAST(@current24hrtime % 100 as VARCHAR),2) AS DATETIME)),7)
SELECT @newtime

答案 2 :(得分:0)

也无法在SQL Server 2000中进行测试。将@newtime变量更改为datetime,因为我非常确定SQL Server 2000中不存在时间数据类型。

DECLARE @current24hrtime INT;
SET @current24hrtime = 1522;
DECLARE @newtime datetime;

SET @newtime = 
        CASE 
            WHEN @current24hrtime = 0 OR @current24hrtime = 2400 THEN '00:00'
            WHEN LEN(@current24hrtime) = 4 THEN 
                LEFT(CAST(@current24hrtime AS VARCHAR(20)),2) + ':' + RIGHT(CAST(@current24hrtime AS VARCHAR(20)),2)
            WHEN LEN(@current24hrtime) = 3 THEN
                LEFT(CAST(@current24hrtime AS VARCHAR(20)),1) + ':' + RIGHT(CAST(@current24hrtime AS VARCHAR(20)),2)
            ELSE '' --not sure how you would want to handle invalid integer times
        END

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(50),@newtime,100),7)) [newtime]