Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak dodać AM/PM do wartości czasu w SQL Server (T-SQL)

W SQL Server możesz użyć T-SQL FORMAT() funkcja formatowania czasu typ danych. Jeśli jednak chcesz dodać oznaczenie AM/PM, musisz użyć innego typu danych. Dzieje się tak, ponieważ czas typ danych jest oparty na zegarze 24-godzinnym, dlatego czas jest formatowany jako taki.

Przykład 1 – Porównanie „czasu” z „data-godzina”

Oto przykład pokazujący, co się stanie, jeśli spróbujesz sformatować typ danych „czas” za pomocą oznaczenia AM/PM:

SELECT 
  FORMAT(CAST('11:28:15' AS datetime), 'hh:mm tt') 'datetime',
  FORMAT(CAST('11:28:15' AS time), 'hh\:mm tt') 'time';

Wynik:

+------------+--------+
| datetime   | time   |
|------------+--------|
| 11:28 AM   | NULL   |
+------------+--------+

Jeśli spróbujesz dodać oznaczenie AM/PM do wartości „czas”, otrzymasz NULL .

Dlatego jeśli chcesz dodać AM lub PM do typu danych czasu, musisz najpierw przekonwertować go na inny typ danych, a następnie sformatować.

Zauważ, że FORMAT() funkcja faktycznie zwraca wynik jako ciąg znaków (chyba że wynikiem jest NULL ).

Jeśli zastanawiasz się, dlaczego w drugim ciągu formatu znajduje się ukośnik odwrotny, jest to wymagane tylko czas typ danych i jest używany do zmiany dwukropka (i wszelkich kropek). Więcej na ten temat tutaj.

Przykład 2 – Konwersja „czasu” na „data-godzina”

Ten przykład jest prawie identyczny z poprzednim przykładem, z wyjątkiem tego, że staram się uczynić go bardziej realistycznym. W tym przypadku jawnie ustawiam zmienną jako typ danych „czas”, a następnie próbuję go sformatować. Następnie przesyłam go jako „datetime” przed ponownym formatowaniem.

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

Wynik:

+--------+------------+
| time   | datetime   |
|--------+------------|
| NULL   | 11:28 AM   |
+--------+------------+

Jeśli wolisz używać CONVERT() funkcja, oto jak by to wyglądało:

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

Wynik:

+--------+------------+
| time   | datetime   |
|--------+------------|
| NULL   | 11:28 AM   |
+--------+------------+

Możesz też po prostu ponownie przypisać wartość do innej zmiennej żądanego typu:

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

Wynik:

+--------+------------+
| time   | datetime   |
|--------+------------|
| NULL   | 11:28 AM   |
+--------+------------+

Przykład 3 – Jednoliterowe oznaczenie AM/PM

Możesz także użyć pojedynczego t aby określić jednoliterowe oznaczenie AM/PM:

SELECT 
  FORMAT(CAST('11:28:15' AS datetime), 'hh:mm t') 'AM',
  FORMAT(CAST('23:28:15' AS datetime), 'hh:mm t') 'PM';

Wynik:

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

Przykład 4 – bez użycia funkcji FORMAT()

FORMAT() funkcja została wprowadzona w SQL Server 2012. Jeśli używasz wcześniejszej wersji SQL Server, musisz użyć innej metody, aby dodać oznaczenie AM/PM. Oto jeden ze sposobów, w jaki możesz to zrobić:

DECLARE @thetime time
SET @thetime = '11:28:15'
SELECT CONVERT(varchar(8), @thetime, 100) Result;

Wynik:

+----------+
| Result   |
|----------|
| 11:28AM  |
+----------+

Alternatywnie możesz użyć zastąpić 100 z 0 dla tego samego wyniku:

DECLARE @thetime time
SET @thetime = '11:28:15'
SELECT CONVERT(varchar(8), @thetime, 0) Result;

Wynik:

+----------+
| Result   |
|----------|
| 11:28AM  |
+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć plik danych z bazy danych programu SQL Server (T-SQL)

  2. Użyj COL_LENGTH(), aby uzyskać długość kolumny w SQL Server

  3. Jaki jest najszybszy sposób zbiorczego wstawiania dużej ilości danych w programie SQL Server (klient C#)

  4. SQL Server v.Next:Wydajność STRING_AGG, część 2

  5. Jak ustawić poniedziałek jako pierwszy dzień tygodnia w SQL Server