我将从datediff()
计算出一个整数让我们说..它是......
declare @earliestTime int;
set @earliestTime=50000000;
我想转换为hh:mm:ss tt
我有这个代码将该int转换为HH:mm:ss
CONVERT(varchar(6), (@earliestTime)/60)+ ':' + RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) % 60) ), 2)+ ':' + RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) %60)*0), 2)
如何将其修改为hh:mm:ss tt(AM或PM)
我这样修改了..
CONVERT(varchar(6),
case
when
((@earliestTime)/60)<=12
then
((@earliestTime)/60)
else
(((@earliestTime)/60)-12)
end )
--CONVERT(varchar(6), case when((@earliestTime)/60)<=12 then (@earliestTime)/60 else ((@earliestTime)/60)-12)
+
':'
+
RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) % 60) ), 2)
+
':'
+
RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) %60)*0), 2
+
' '
+
convert(varchar(2),(case when ((@earliestTime)/60)<12 then 'am' else 'pm' end)))
但它给了我这个错误..
转换时转换失败 varchar值'pm'到数据类型int。
我已经将'pm'或'am'转换为varchar(2)。为什么系统仍然给我这个错误?
如何使其正确或有更好的方法?
答案 0 :(得分:2)
你没有解释你的整数代表什么,因此很难给出答案。
最好使用适当的数据类型。我使用DATETIME
- 它将允许您根据需要执行计算,排序和格式化。将文字存储时间会导致后来的麻烦。
通过将时间添加到SQL纪元(1900-01-01 00:00:00)来存储时间,就像这样
SELECT DATEADD(SECOND, 50000, CONVERT(DATETIME, 0.0))
SELECT DATEADD(MINUTE, 50000, CONVERT(DATETIME, 0.0))
然后相应地格式化DATETIME
对象。
尝试以下方法:
DECLARE @date DATETIME
SET @date = DATEADD(SECOND, 50000, CONVERT(DATETIME, 0.0))
SELECT CONVERT(VARCHAR, DATEPART(HOUR, @date)%12)
+ ':' + RIGHT(CONVERT(VARCHAR, @date, 108),5)
+ RIGHT(CONVERT(VARCHAR, @date, 100), 2)
我还应该指出,您正在使用数据库,而不是表示层。不必担心在数据库中格式化日期和时间;它是关于数据存储和检索。大概这次你回到应用程序或网页上放到屏幕上,报告或其他什么 - 最佳做法是将数据保持为完整的DATETIME
并让顶层格式化它。通过转换为VARCHAR
,您只是删除信息并限制自己;没有好处,很多成本。