sql >> Database >  >> RDS >> Sqlserver

Onthoud dit bij het formatteren van een TIME-gegevenstype in SQL Server (T-SQL)

In SQL Server, wanneer u de T-SQL FORMAT() . gebruikt functie om een ​​tijd te formatteren gegevenstype, moet u onthouden dat u eventuele dubbele punten of punten in uw opmaaktekenreeks moet escapen.

Dit komt omdat de FORMAT() functie is gebaseerd op CLR-opmaakregels, die dicteren dat dubbele punten en punten moeten worden ontsnapt. Daarom, wanneer de notatietekenreeks (tweede parameter) een dubbele punt of punt bevat, moet de dubbele punt of punt worden ontsnapt met een backslash wanneer een invoerwaarde (eerste parameter) van de tijd is data type.

Voorbeeld 1 – Ontsnappen aan een dikke darm

Hier is een eenvoudig voorbeeld van het gebruik van de FORMAT() functie om een ​​tijd te formatteren gegevenstype.

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

Resultaat:

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

Let op de backslash in de opmaakreeks.

Voorbeeld 2 – Ontsnappen aan een periode

Hetzelfde geldt als we het willen opmaken met een punt:

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

Resultaat:

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

Voorbeeld 3 – Niet ontsnapt

Dit is wat er gebeurt als we niet ontsnappen aan de dubbele punt of punt.

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

Resultaat:

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

We krijgen NULL in beide gevallen.

Voorbeeld 4 – Datum/tijd (geen escape nodig)

U hoeft alleen de dubbele punt en punt te escapen als de invoerwaarde van het gegevenstype time is . Als het datetime is (of datetime2 enz.), hoeft u er niet aan te ontsnappen.

Als ik het vorige voorbeeld gebruik, maar de invoerwaarden verander naar datetime2 , krijgen we het gewenste resultaat zonder iets te hoeven ontsnappen:

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

Resultaat:

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

Hetzelfde geldt voor sysdatetime :

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

Resultaat:

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

  1. Verander de Oracle-poort van poort 8080

  2. Procedure:trigger maken voor automatische update gewijzigde datum met SQL Server 2008

  3. Oracle-database vergrendelen voordat u de scripts voor het verwijderen/laden van gegevens uitvoert

  4. UPDATEs voor statistieken