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

Pamiętaj o tym podczas formatowania typu danych TIME w SQL Server (T-SQL)

W SQL Server, gdy używasz T-SQL FORMAT() funkcja formatowania czasu typ danych, musisz pamiętać o zmianie znaczenia dwukropków lub kropek w ciągu formatu.

Dzieje się tak, ponieważ FORMAT() funkcja opiera się na regułach formatowania CLR, które dyktują, że dwukropki i kropki muszą zostać zmienione. Dlatego też, gdy ciąg formatujący (drugi parametr) zawiera dwukropek lub kropkę, dwukropek lub kropka muszą być poprzedzone ukośnikiem odwrotnym, gdy wartość wejściowa (pierwszy parametr) ma czas typ danych.

Przykład 1 – Ucieczka z okrężnicy

Oto podstawowy przykład użycia funkcji FORMAT() funkcja formatowania czasu typ danych.

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

Wynik:

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

Zwróć uwagę na odwrotny ukośnik w ciągu formatu.

Przykład 2 – Ucieczka przed okresem

To samo dotyczy sytuacji, gdy chcemy sformatować go z kropką:

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

Wynik:

+----------+
| Result   |
|----------|
| 11.28    |
+----------+

Przykład 3 – Bez ucieczki

Oto, co się stanie, jeśli nie uciekniemy od okrężnicy lub okresu.

SELECT 
  FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon',
  FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';

Wynik:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| NULL              | NULL               |
+-------------------+--------------------+

Otrzymujemy NULL w obu przypadkach.

Przykład 4 – Data i godzina (nie trzeba uciekać)

Musisz zmienić dwukropek i kropkę tylko wtedy, gdy wartość wejściowa ma typ danych czas . Jeśli jest data i godzina (lub datagodzina2 itp.), nie musisz im uciekać.

Jeśli użyję poprzedniego przykładu, ale przełączę wartości wejściowe na datetime2 , otrzymujemy pożądany wynik bez konieczności ucieczki:

SELECT 
  FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon',
  FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';

Wynik:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| 11:28             | 11.28              |
+-------------------+--------------------+

To samo dotyczy sysdatetime :

SELECT 
  FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon',
  FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';

Wynik:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| 04:46             | 04.46              |
+-------------------+--------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. varbinary do ciągu w SQL Server

  2. Jaki jest najlepszy sposób kontrolowania wersji moich procedur przechowywanych na serwerze SQL?

  3. 4 niesamowite zasoby monitorowania SQL Server dla administratorów baz danych

  4. Wyjaśnienie SQL Server (localdb)\v11.0

  5. Jak podzielić ciąg i wstawić wartości do tabeli w SQL Server