sql >> Databasteknik >  >> RDS >> Sqlserver

Kom ihåg detta när du formaterar en TIME-datatyp i SQL Server (T-SQL)

I SQL Server, när du använder T-SQL FORMAT() funktion för att formatera en tid datatyp måste du komma ihåg att undvika eventuella kolon eller punkter i din formatsträng.

Detta beror på att FORMAT() funktionen förlitar sig på CLR-formateringsregler, som dikterar att kolon och punkter måste escapes. Därför, när formatsträngen (andra parametern) innehåller ett kolon eller punkt, måste kolonet eller perioden escapes med omvänt snedstreck när ett indatavärde (första parametern) är av tiden data typ.

Exempel 1 – Att fly ett kolon

Här är ett grundläggande exempel på hur du använder FORMAT() funktion för att formatera en tid datatyp.

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

Resultat:

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

Notera snedstrecket i formatsträngen.

Exempel 2 – Att fly en period

Samma sak gäller om vi vill formatera den med en punkt:

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

Resultat:

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

Exempel 3 – Escaped

Det här är vad som händer om vi inte slipper tjocktarmen 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 båda fallen.

Exempel 4 – Datetime (du behöver inte fly)

Du behöver bara lämna kolon och punkt om inmatningsvärdet är av datatypen tid . Om det är datumtid (eller datetime2 etc), behöver du inte undkomma dem.

Om jag använder föregående exempel, men byter indatavärden till datetime2 , får vi det önskade resultatet utan att behöva undkomma något:

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              |
+-------------------+--------------------+

Detsamma gäller för sysdatetime :

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

Resultat:

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

  1. Hur MATCH MOT fungerar i MariaDB

  2. mysql preparerat satsfel:MySQLSyntaxErrorException

  3. Vad är motsatsen till GROUP_CONCAT i MySQL?

  4. Använda utdataparametrar för lagrad procedur i C#