子串时间格式

时间:2012-10-18 17:58:21

标签: 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点34分 - 它还将军事时间转换为此代码中的标准时间,并将其附加到我从列,例如日期,姓氏等中提取的其他项目我需要时间显示为上午10:54:00

所以基本上我需要在任何时间结束时添加:00(始终为零),并在零和即将进入的AM或PM之间添加一个空格。

我不太擅长格式化,所以我遇到了这个问题。有什么建议? (我正在运行SQL Server 2008 R2)

1 个答案:

答案 0 :(得分:2)

不试图重写你的表达,我只会STUFF中的':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')
相关问题