Как я могу вытащить только номер часа с AM / PM в SQL SERVER - PullRequest
0 голосов
/ 30 января 2020

Мой ввод:

2020-01-01 09:01:00.000
2020-01-03 18:01:00.000

Мой вывод должен быть таким:

9 AM
6 PM

Ответы [ 5 ]

2 голосов
/ 30 января 2020

Вы можете использовать такую ​​функцию форматирования, если вы используете SQL Server 2012 или более позднюю версию.

SELECT FORMAT(GETDATE(),'h tt') AS MyTime

Обратите внимание на использование строчной буквы 'h', которая дает 12 часов часы без начального нуля, «ЧЧ» дает два ди git 24-часовых часа, так что вы получите результат, например, «16 вечера».

0 голосов
/ 30 января 2020

Я бы сделал:

SELECT V.YourColumn,
       LTRIM(SUBSTRING(ca.v,13,2) + ' ' RIGHT(ca.v,2))
FROM (VALUES(CONVERT(Datetime2(3),'2020-01-01 09:01:00.000')),
            (CONVERT(Datetime2(3),'2020-01-03 18:01:00.000')))V(YourColumn)
     CROSS APPLY (VALUES(CONVERT(varchar(30),V.YourColumn,0))) ca(v);

В CROSS APPLY я конвертирую дату и время в формат MMM d YYYY h:mmAM/PM, тогда вы можете использовать SUBSTRING / LEFT, чтобы получить нужные биты.

Альтернативным подходом может быть использование DATEPART:

SELECT CONCAT(CASE DATEPART(HOUR,V.YourColumn) WHEN 12 THEN 12 WHEN 0 THEN 12 ELSE DATEPART(HOUR,V.YourColumn) % 12 END,' ', RIGHT(CONVERT(varchar(30),V.YourColumn,0),2))
FROM (VALUES(CONVERT(Datetime2(3),'2020-01-01 09:01:00.000')),
            (CONVERT(Datetime2(3),'2020-01-03 00:01:00.000')),
            (CONVERT(Datetime2(3),'2020-01-03 18:01:00.000')))V(YourColumn);

Поскольку 12 % 12 и 0 % 12 оба = 0, тогда вам необходимо выражение CASE для обработки те.

0 голосов
/ 30 января 2020

Если ввод относится к типу, связанному с датой, вы можете использовать FORMAT с соответствующей строкой формата, например:

SELECT FORMAT(getdate(), 'HH:mm tt')

Для меня это возвращает:

12:51 PM

Just HH tt возвращает нужную строку, в этом случае:

12 PM
0 голосов
/ 30 января 2020

Ваш запрос.

SELECT convert(VARCHAR(30), cast('2020-01-01 09:01:00.000' AS DATETIME), 100)
    ,convert(VARCHAR(30), cast('2020-01-03 18:01:00.000' AS DATETIME), 100)
0 голосов
/ 30 января 2020

Вы можете сделать преобразование:

SELECT CONVERT(varchar(10), CONVERT(TIME, '2020-01-01 09:01:00.000'), 100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...