Sql server SQL Server中的INT到hh:mm:ss tt

Sql server SQL Server中的INT到hh:mm:ss tt,sql-server,Sql Server,我将从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' + C

我将从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(上午或下午)

我改成这样

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)))
CONVERT(varchar(6),
案例
什么时候

((@earliestTime)/60)你没有解释整数代表什么,所以很难给出答案

最好对时间使用合适的数据类型。我会使用
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
对象

  • 要获取HH:mm:ss,请使用格式108
  • 要获取AM/PM标志,请使用100并使用最右边的两个字符
请尝试以下方法:

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
,您只需删除信息并限制自己;没有好处,成本很大。

整数指定了什么?两个日期之间的秒数,小时数,什么?您最后3行给我这个..13:53:20PM不支持吗b 1:53:20 pm?你说得对-你需要使用格式字符串来获得最佳组合。这将起作用,尽管你可能会找到一个更简单的组合
CONVERT(VARCHAR,DATEPART(HOUR,@date)%12)+':'+right(CONVERT(VARCHAR,@date,108),5)+right(CONVERT(VARCHAR,@date,100),2)
您可以使用以下命令将您的价值转换为日期:cast(@earliessttime/(24.*60*60)as datetime)一个副作用是..您的方法显示的是下午0:00:00,而不是12:00:00pm@william没错。SQL实际上没有您需要的格式模式,但您正在将其用于它不是为之设计的东西。为什么要在数据库中格式化为字符串?