sql >> Database teknologi >  >> RDS >> Sqlserver

Husk dette, når du formaterer en TIME-datatype i SQL Server (T-SQL)

I SQL Server, når du bruger T-SQL FORMAT() funktion til at formatere et tidspunkt datatype, skal du huske at undslippe eventuelle koloner eller punktum i din formatstreng.

Dette skyldes, at FORMAT() funktionen er afhængig af CLR-formateringsregler, som dikterer, at koloner og punktum skal escapes. Derfor, når formatstrengen (anden parameter) indeholder et kolon eller punktum, skal kolonet eller punktumet escapes med omvendt skråstreg, når en inputværdi (første parameter) er af tiden datatype.

Eksempel 1 – Undslippe et kolon

Her er et grundlæggende eksempel på brug af FORMAT() funktion til at formatere et tidspunkt datatype.

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

Resultat:

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

Bemærk omvendt skråstreg i formatstrengen.

Eksempel 2 – Undgå en periode

Det samme gælder, hvis vi ønsker at formatere det med et punktum:

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

Resultat:

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

Eksempel 3 – Unescaped

Her er, hvad der sker, hvis vi ikke undslipper tyktarmen eller perioden.

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

Resultat:

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

Vi får NULL i begge tilfælde.

Eksempel 4 – Datotid (ingen grund til at undslippe)

Du behøver kun at undslippe kolon og punktum, hvis inputværdien er af datatypen tid . Hvis det er datotid (eller datetime2 osv.), behøver du ikke undslippe dem.

Hvis jeg bruger det forrige eksempel, men skifter inputværdierne til datetime2 , får vi det ønskede resultat uden at skulle undslippe noget:

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

Resultat:

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

Det samme gælder for sysdatetime :

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

Resultat:

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

  1. Er strengoperator "+" så enkel?

  2. HIbernate problem med Oracle Trigger til generering af id fra en sekvens

  3. Database-sikkerhedskopier - Sammenligning af MariaDB Mariabackup og Percona Xtrabackup

  4. Kan jeg oprette en database ved hjælp af PDO i PHP?