我对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
答案 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]