sql >> Database >  >> RDS >> Sqlserver

Een tekenreeks converteren naar een datum/tijd in SQL Server met behulp van CAST()

In SQL Server kunt u de CAST() functie om een ​​uitdrukking van het ene gegevenstype naar het andere te converteren. Deze functie werkt bijna hetzelfde als de CONVERT() functie, behalve dat de syntaxis iets anders is (en CAST() accepteert de style . niet argument).

Dus als u een string moet converteren naar een datum/tijd-waarde, kunt u de CONVERT() gebruiken functie of de CAST() functie.

En als u een foutmelding krijgt tijdens het gebruik van deze twee functies, wordt de PARSE() functie is misschien precies wat je nodig hebt.

Dit artikel bevat voorbeelden van het gebruik van de CAST() functie.

Syntaxis

De syntaxis gaat als volgt:

CAST ( expression AS data_type [ ( length ) ] )

Deze argumenten worden als volgt gedefinieerd:

expression
Elke geldige uitdrukking.
data_type
Het doelgegevenstype. Dit omvat xmlgroot , en sql_variant . Alias-gegevenstypen kunnen niet worden gebruikt.
length
Een optioneel geheel getal dat de lengte van het doelgegevenstype aangeeft. De standaardwaarde is 30 .

Voorbeeld 1 – Gegevenstype converteren naar datum

In dit voorbeeld zetten we de tekenreeks om in een datum gegevenstype (we specificeren dit met behulp van date als het tweede argument).

SELECT CAST('20 Dec 2018' AS date) AS Result;

Resultaat:

+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

Net als bij CONVERT() de tekenreeks moet een stijl hebben die kan worden geconverteerd naar het opgegeven gegevenstype, anders krijgt u een foutmelding:

SELECT CAST('Homer' AS date) AS Result;

Resultaat:

Conversion failed when converting date and/or time from character string.

Voorbeeld 2 – Converteren naar datum/tijd-gegevenstype

In dit voorbeeld converteren we naar de datetime gegevenstype:

SELECT CAST('20 Dec 2018' AS datetime) AS Result;

Resultaat:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 00:00:00.000 |
+-------------------------+

U kunt ook de tijd samen met de datum specificeren:

SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;

Resultaat:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 14:00:00.000 |
+-------------------------+

Voorbeeld 3 – Converteren naar datetime2 gegevenstype

Hier converteren we naar de datetime2 gegevenstype:

SELECT CAST('20 Dec 2018' AS datetime2) AS Result;

Resultaat:

+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-12-20 00:00:00.0000000 |
+-----------------------------+

Voorbeeld 4 – Converteren naar datatimeoffset datatype

In dit voorbeeld converteren we naar de datetimeoffset gegevenstype:

SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Result;

Resultaat:

+------------------------------------+
| Result                             |
|------------------------------------|
| 2018-12-20 00:00:00.0000000 +00:00 |
+------------------------------------+

Voorbeeld 5 – Converteren naar datatype smalldatetime

Hier converteren we naar de smalldatetime gegevenstype:

SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;

Resultaat:

+---------------------+
| Result              |
|---------------------|
| 2018-12-20 00:00:00 |
+---------------------+

Voorbeeld 6 – Converteren naar tijdgegevenstype

In dit voorbeeld converteren we naar de tijd gegevenstype:

SELECT CAST('20 Dec 2018' AS time) AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

In dat geval hebben we een datum opgegeven, maar geen tijd, dus het kwam terug als 00:00:00 . Hier is nog een voorbeeld waarbij we daadwerkelijk een tijd specificeren:

SELECT CAST('2pm' AS time) AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

Maar als we de datum toevoegen, krijgen we een foutmelding (in tegenstelling tot een eerder voorbeeld toen we converteerden naar datetime ):

SELECT CAST('2pm 20 Dec 2018' AS time) AS Result;

Resultaat:

Conversion failed when converting date and/or time from character string.

Dus in dit geval moet je converteren naar datetime of smalldatetime .

Voorbeeld 7 – De datum weglaten

Als u de datum weglaat tijdens het converteren naar de datetime of smalldatetime gegevenstypen, retourneert het 1900-01-01 als de datum:

SELECT CAST('2pm' AS datetime) AS Result;

Resultaat:

+-------------------------+
| Result                  |
|-------------------------|
| 1900-01-01 14:00:00.000 |
+-------------------------+

Als u liever de CONVERT() . gebruikt functie, zie deze string tot datum/tijd CONVERT() voorbeelden met dezelfde voorbeelden als hierboven.

Ook, zoals vermeld, als je een foutmelding krijgt tijdens het converteren van een string naar een datum, probeer dan de PARSE() in plaats daarvan functioneren. Het werkt in sommige gevallen waar CAST() niet.


  1. Prestatieverrassingen en veronderstellingen:STEL NOCOUNT IN OP

  2. Is er een manier om door een tabelvariabele in TSQL te lopen zonder een cursor te gebruiken?

  3. Hoe kan ik de taak scripts genereren in SQL Server Management Studio 2008 automatiseren?

  4. Impact van fragmentatie op uitvoeringsplannen