有没有一种方法可以从字符串文字中提取时间

时间:2019-11-11 05:57:09

标签: sql sql-server

我有一个varchar列,其中包含此数据"Mon, 11 Nov 2019 12:00:00 +0800"。我只想选择12:00:00的时间。

例如:

select 'Last Updated on Mon, 11 Nov 2019 12:00:00 +0800'

它应该返回"12:00:00"

的时间

sql中是否有解决此问题的函数?

这是我的示例原始数据 enter image description here

2 个答案:

答案 0 :(得分:2)

由于您的样品没有几秒钟,我相信它的默认值为:00。使用Patindexsubstring可以解决问题。

declare @str varchar(max) = 'Last Updated on Nov 11 2019, 12:45 pm +08'

select concat(substring(@str, patindex('%[0-1][0-9]:[0-5][0-9]%'
    , @str), 5), ':00')

输出:

enter image description here

忽略minutesseconds

select concat(substring(@str, patindex('%[0-1][0-9]:[0-5][0-9]%'
        , @str), 2), ':00:00')

输出:

enter image description here

if将考虑am/pmcasttime

  select cast(concat(substring(@str, patindex('%[0-1][0-9]:[0-5][0-9]%'
            , @str), 2), ':00:00', substring(@str,  patindex('%[0-1][0-9]:[0-5][0-9]%', @str) + 6, 2)) as time)

答案 1 :(得分:2)

declare @str varchar(max) = 'Last Updated on Nov 11 2019, 1:45 pm +08';

select LTRIM(substring(@str, patindex('%[01 ][0-9]:[0-5][0-9]%', @str), 5)+':00');

尝试一下。它涵盖了小时数少于10(即个位数)的情况。