Sql server 子字符串时间格式

Sql server 子字符串时间格式,sql-server,tsql,time,formatting,sql-server-2008-r2,Sql Server,Tsql,Time,Formatting,Sql Server 2008 R2,目前,我正在使用此脚本从列中提取时间: (RIGHT('0' + ltrim(RIGHT(convert(varchar,cast(SUBSTRING(A.DocSign, CHARINDEX('^', A.DocSign) +1, 19) as datetime), 100), 7)), 7)) 它返回的是一个格式类似于10:34AM的时间-它还将军事时间转换为代码中的标准时间,并将其附加到我从列中提取的其他项目,如日期、姓氏等。我需要显示为10:54:00AM的时间 所以本质上我需

目前,我正在使用此脚本从列中提取时间:

    (RIGHT('0' + ltrim(RIGHT(convert(varchar,cast(SUBSTRING(A.DocSign, CHARINDEX('^', A.DocSign) +1, 19) as datetime), 100), 7)), 7))
它返回的是一个格式类似于10:34AM的时间-它还将军事时间转换为代码中的标准时间,并将其附加到我从列中提取的其他项目,如日期、姓氏等。我需要显示为10:54:00AM的时间

所以本质上我需要在任何时间的末尾加上:00(总是零),并在零和即将到来的AM或PM之间加一个空格

我不太擅长格式化,所以我在这方面有困难。有什么建议吗?
(我运行的是SQL Server 2008 R2)

在不重写表达式的情况下,我只需输入“:00”

STUFF(
   (RIGHT('0' + ltrim(RIGHT(convert(varchar,cast(SUBSTRING(
    A.DocSign, CHARINDEX('^', A.DocSign) +1, 19) as datetime), 100), 7)), 7)),
6,0,':00 ')
另一种方法是将
PM
/
AM
替换为嵌入的零,即

REPLACE(REPLACE(
   (RIGHT('0' + ltrim(RIGHT(convert(varchar,cast(SUBSTRING(
    A.DocSign, CHARINDEX('^', A.DocSign) +1, 19) as datetime), 100), 7)), 7)),
'PM', ':00 PM'),'AM', ':00 AM')

这是可行的,但如果我在下午3:45到3:45等时间将零去掉,并且我没有在正确的位置插入:00,会怎么样?我添加了一个替代选项,它假设在上午/下午之前没有前导空格。谢谢您的帮助!工作得很好。