以hh:mm:ss AM(PM)格式(sql)转换时间

以hh:mm:ss AM(PM)格式(sql)转换时间,sql,Sql,如何将时间“8:02:24 AM”转换为“08:02:24 AM”,以便特定列中的所有时间都具有固定长度 我尝试在convert函数中使用不同的样式值,但未能获得所需的结果。下面的示例代码将根据小时部分长度1或2添加0 declare @hour char(2) declare @time varchar(20)='8:02:24 PM' select @hour=substring(@time,1,charindex(':',@time)-1) if len(@hour

如何将时间“8:02:24 AM”转换为“08:02:24 AM”,以便特定列中的所有时间都具有固定长度


我尝试在convert函数中使用不同的样式值,但未能获得所需的结果。

下面的示例代码将根据小时部分长度1或2添加0

declare @hour char(2)
    declare @time varchar(20)='8:02:24 PM'
    select @hour=substring(@time,1,charindex(':',@time)-1)
    if len(@hour)=1
    begin
       set @hour='0'+@hour
       set @time=@hour+substring(@time,charindex(':',@time),10)
    end   
    select @time

您可以使用CONVERT函数将所有时间值转换为24小时格式

SELECT CONVERT(VARCHAR, <your column name>, 108) AS HourMinuteSecond
如果您不想要24小时格式,可以使用

SELECT REPLACE(RIGHT('0' + LTRIM(RIGHT(CONVERT(VARCHAR, <your column name>, 131), 14)), 11), ':000', ' ') AS HourMinuteSecond

请仅标记相关的DBMS。Oracle、SQL Server和MySQL都处理不同的源列数据类型是什么?@RajeshBhat datetime如果是datetime字段,则将以hh:mm:ss格式存储。您使用的是哪台数据库服务器?@RajeshBhat我想要固定长度的,如果是上午8:00:00,那么应该显示上午8:00:00,我使用的是sql server 2008。我不想要24小时格式的。对于08PM,它也应该显示08:00:00 PM,而不是20:00:00,但当它是12PM时,它又添加了一个0…它应该显示12:00:00 PM,而不是012:00:00 PM。您能帮我解决这个问题吗,提前谢谢。我已经检查过,它在SQL Server 2014上工作:。也许SQLServer2008中存在差异。您可以尝试减少剪切字符的数量,目前为14个,以检查它是否正常工作。是的,但当我尝试在SSRS报告工具中提取数据时,它会向其中添加0。谢谢你请将右函数的第二个参数更改为11。我已经更新了答案,请检查。
SELECT REPLACE(RIGHT('0' + LTRIM(RIGHT(CONVERT(VARCHAR, <your column name>, 131), 14)), 11), ':000', ' ') AS HourMinuteSecond
   SELECT REPLACE(RIGHT('0' + LTRIM(RIGHT(CONVERT(VARCHAR, CONVERT(DATETIME, '8:8:8 PM'), 131), 14)), 11), ':000', ' ') AS HourMinuteSecond