Есть ли способ извлечь время из строкового литерала - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть столбец 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 ]

2 голосов
/ 11 ноября 2019
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, то есть однозначными числами.

2 голосов
/ 11 ноября 2019

, поскольку у вас нет секунд на выборку, я считаю, что по умолчанию она равна :00. Использование Patindex и substring поможет.

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

или для игнорирования minutes и seconds

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

выход:

enter image description here

if примет во внимание am/pm. cast это до time.

  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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...