sql >> Databáze >  >> RDS >> Sqlserver

Pamatujte na to při formátování datového typu TIME v SQL Server (T-SQL)

V SQL Server, když používáte T-SQL FORMAT() funkci formátování času datového typu, je třeba pamatovat na to, abyste ve svém formátovacím řetězci unikli všem dvojtečkám nebo tečkám.

Důvodem je FORMAT() funkce závisí na pravidlech formátování CLR, která nařizují, že dvojtečky a tečky musí být escapovány. Pokud tedy formátovací řetězec (druhý parametr) obsahuje dvojtečku nebo tečku, musí být dvojtečka nebo tečka ukončena zpětným lomítkem, pokud je vstupní hodnota (první parametr) čas datový typ.

Příklad 1 – Únik z dvojtečky

Zde je základní příklad použití FORMAT() funkci formátování času datový typ.

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

Výsledek:

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

Poznamenejte si zpětné lomítko ve formátovacím řetězci.

Příklad 2 – Únik z období

Totéž platí, pokud jej chceme formátovat s tečkou:

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

Výsledek:

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

Příklad 3 – Bez kódování

Zde je to, co se stane, když neunikneme dvojtečce nebo tečce.

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

Výsledek:

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

Dostaneme NULL v obou případech.

Příklad 4 – Datum a čas (není třeba escapovat)

Dvojtečku a tečku je potřeba opustit pouze v případě, že vstupní hodnota je datového typu time . Pokud je to datetime (nebo datetime2 atd.), nemusíte jim unikat.

Pokud použiji předchozí příklad, ale přepnu vstupní hodnoty na datetime2 , získáme požadovaný výsledek, aniž bychom museli cokoli escapovat:

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

Výsledek:

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

Totéž platí pro sysdatetime :

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

Výsledek:

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

  1. Prozkoumání Java Unit Testing pomocí JUnit Test Framework

  2. ORA-04091:tabulka [bla] mutuje, spouštěč/funkce ji nemusí vidět

  3. Oprava Msg 8114 „Chyba při převodu datového typu varchar na číselný“ v SQL Server

  4. Co je MariaDB TX? Jak spravovat nový MariaDB MySQL Fork!