SQL:在军事时间转换后在AM / PM之前添加空格

时间:2016-11-10 20:19:39

标签: sql sql-server

我到处研究这个,但我似乎无法找到它。

我有一个名为OPEN_TIME的专栏,其中包含军事时间,例如:

1900-01-01 23:00:00.000

我只想提取时间,这是我成功完成的:

LTRIM(RIGHT(CONVERT(varchar, OPEN_TIME, 100), 7))

但是,这给了我一个时间:

11:00PM

我想在AM / PM之前放一个空格,看起来像是:

11:00 PM

不确定这是否像它看起来那么简单?任何建议将不胜感激。

3 个答案:

答案 0 :(得分:2)

如果2012+你可以使用Format()

Declare @Open_Time DateTime = '1900-01-01 23:00:00.000'
Select Format(@Open_Time,'hh:mm tt')

返回

11:00 PM

我应该注意到Format()的性能并不为人所知。

答案 1 :(得分:1)

在任何版本的SQL Server中,您都可以使用REPLACE函数

REPLACE(LTRIM(RIGHT(CONVERT(varchar, OPEN_TIME, 100), 7)),'PM',' PM')

答案 2 :(得分:0)

如果您不使用2012或不想使用Format,则可以使用STUFF完成此操作。

Declare @Open_Time DateTime = '1900-01-01 23:00:00.000'
SELECT
    STUFF(
    LTRIM(RIGHT(CONVERT(VARCHAR, @OPEN_TIME, 100), 7)),
    LEN(LTRIM(RIGHT(CONVERT(VARCHAR, @OPEN_TIME, 100), 7))) - 1,
    0,
    ' ')

https://msdn.microsoft.com/en-us/library/ms188043.aspx