Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да добавите AM/PM към времева стойност в SQL Server (T-SQL)

В SQL Server можете да използвате T-SQL FORMAT() функция за форматиране на време тип данни. Ако обаче трябва да добавите обозначението AM/PM, ще трябва да използвате различен тип данни. Това е така, защото навремета Типът данни се основава специално на 24-часов часовник и следователно времето е форматирано като такова.

Пример 1 – Сравняване на ‘time’ с ‘datetime’

Ето пример, за да демонстрирате какво се случва, ако се опитате да форматирате типа данни „време“ с обозначението AM/PM:

ИЗБЕРЕТЕ ФОРМАТ(CAST('11:28:15' КАТО дата и час), 'hh:mm tt') 'datetime', FORMAT(CAST('11:28:15' КАТО време), 'hh\:mm tt') 'време';

Резултат:

+-----------+-------+| дата и час | време ||-----------+--------|| 11:28 сутринта | NULL |+-----------+-------+

Ако се опитате да добавите обозначението AM/PM към стойност „време“, ще получите NULL .

Следователно, ако трябва да добавите AM или PM към тип данни за време, първо ще трябва да го преобразувате в друг тип данни и след това да го форматирате.

Имайте предвид, че FORMAT() функцията всъщност връща резултата като низ (освен ако резултатът не е NULL ).

Ако се чудите защо има обратна наклонена черта във втория форматен низ, това се изисква само за време тип данни и се използва за избягване на двоеточие (и всякакви точки). Повече за това тук.

Пример 2 – Преобразуване на ‘time’ в ‘datetime’

Този пример е почти идентичен с предишния пример, с изключение на това, че се опитвам да направя това по-реалистично. В този изрично задавам променлива като тип данни „време“ и след това се опитвам да я форматирам. След това го предавам като „datetime“, преди да го форматирам отново.

DECLARE @thetime time ='11:28:15'ИЗБЕРЕТЕ ФОРМАТ(@thetime, 'hh\:mm tt') 'time', FORMAT(CAST(@thetime като datetime), 'hh:mm tt') 'datetime';

Резултат:

<пред>+--------+-----------+| време | дата и час ||--------+------------|| NULL | 11:28 AM |+--------+-----------+

Ако предпочитате да използвате CONVERT() функция, ето как би изглеждало това:

DECLARE @thetime time ='11:28:15'ИЗБЕРЕТЕ ФОРМАТ(@thetime, 'hh\:mm tt') 'time', FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';

Резултат:

<пред>+--------+-----------+| време | дата и час ||--------+------------|| NULL | 11:28 AM |+--------+-----------+

Или можете просто да присвоите стойността на друга променлива от желания тип:

DECLARE @thetime time ='11:28:15'DECLARE @thedatetime datetime =@thetimeSELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(@thedatetime, 'hh:mm tt' ) 'datetime';

Резултат:

<пред>+--------+-----------+| време | дата и час ||--------+------------|| NULL | 11:28 AM |+--------+-----------+

Пример 3 – Единична буква AM/PM обозначение

Можете също да използвате единичен t за да посочите еднобуквен обозначение AM/PM:

ИЗБЕРЕТЕ ФОРМАТ(CAST('11:28:15' КАТО дата и час), 'hh:mm t') 'AM', FORMAT(CAST('23:28:15' КАТО дата и час), 'hh:mm t ') 'PM';

Резултат:

+--------+--------+| AM | PM ||--------+--------|| 11:28 А | 11:28 P |+---------+--------+

Пример 4 – Без използване на функцията FORMAT()

FORMAT() функцията беше въведена в SQL Server 2012. Ако използвате по-ранна версия на SQL Server, ще трябва да използвате различен метод, за да добавите обозначението AM/PM. Ето един начин да направите това:

DECLARE @thetime timeSET @thetime ='11:28:15'SELECT CONVERT(varchar(8), @thetime, 100) Резултат;

Резултат:

+---------+| Резултат ||----------|| 11:28 сутринта |+----------+

Като алтернатива можете да използвате replace 100 с 0 за същия резултат:

DECLARE @thetime timeSET @thetime ='11:28:15'SELECT CONVERT(varchar(8), @thetime, 0) Резултат;

Резултат:

+---------+| Резултат ||----------|| 11:28 сутринта |+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се използва UPDATE с клауза OUTPUT, когато има тригер в таблицата

  2. Връщане на привилегии на колона от свързан сървър в SQL Server (T-SQL примери)

  3. Как да върнете изхода на съхранената процедура в променлива в sql сървър

  4. Добавете редуващ се цвят на ред към отчета за услугите за отчитане на SQL Server

  5. Как да хвана изключения за изчакване на SQLServer