sql >> Database >  >> RDS >> Sqlserver

Een tekenreeks converteren naar een datum/tijd in SQL Server met PARSE()

Als u met SQL Server werkt, is de kans groot dat u ten minste één van de CONVERT() of CAST() functies om van het ene gegevenstype naar het andere te converteren. Als u ooit een fout bent tegengekomen tijdens het converteren van een tekenreeks naar een datum/tijd-gegevenstype, de PARSE() functie zou kunnen zijn wat je nodig hebt.

Als je bijvoorbeeld een string hebt zoals bijvoorbeeld Vri 20 Jul 2018 , de CONVERT() of CAST() functies zal een foutmelding geven. Maar de PARSE() functie zal het zonder problemen aan.

De PARSE() functie retourneert het resultaat van een expressie, vertaald naar het gevraagde gegevenstype in SQL Server. U kunt het dus gebruiken om uw tekenreekswaarde te "vertalen" naar een datum/tijd-gegevenstype (zoals datum , datumtijd , datetime2 , enz.).

Syntaxis

Hier is de syntaxis voor de PARSE() functie:

PARSE ( string_value AS data_type [ USING culture ] )

Waar string_value is de waarde die u wilt ontleden, data_type is het gegevenstype waarin u het wilt laten parsen, en culture is een optioneel argument dat u kunt gebruiken om aan te geven welke taalindeling moet worden gebruikt bij het ontleden van de tekenreeks.

Basisvoorbeeld

Hier is een eenvoudig voorbeeld om het gebruik te demonstreren.

SELECT PARSE('Friday, 20 July 2018' AS datetime2) 
AS 'Result';

Resultaat:

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

Verwijder het tijdgedeelte

In het vorige voorbeeld hebben we gespecificeerd dat de tekenreeks moet worden geparseerd als een datetime2 data type. Dit gegevenstype bevat de tijdcomponent met een hoge precisie. Als u de tijdcomponent niet nodig heeft, kunt u deze altijd ontleden als een datum gegevenstype.

Dit is het resultaat als we een datum specificeren gegevenstype:

SELECT PARSE('Friday, 20 July 2018' AS date) 
AS 'Result';

Resultaat:

+------------+
| Result     |
|------------|
| 2018-07-20 |
+------------+

Behoud de tijd, maar met minder precisie

En als je doe de tijd nodig hebben, maar met minder precisie, je kunt altijd de smalldatetime . gebruiken gegevenstype:

SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) 
AS 'Result';

Resultaat:

+---------------------+
| Result              |
|---------------------|
| 2018-07-20 14:36:00 |
+---------------------+

Maar als dat niet precies genoeg is, is er altijd nog de datetime gegevenstype:

SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) 
AS 'Result';

Resultaat:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-07-20 14:35:50.523 |
+-------------------------+

Variaties van de datuminvoer

De PARSE() functie kan meestal de datum bepalen die u probeert te converteren, zolang u deze opgeeft als een geldige weergave van het gevraagde gegevenstype. Hier zijn enkele voorbeelden van de datum die in verschillende stijlen wordt weergegeven:

SELECT 
    PARSE('Friday, 20 July 2018' AS date) AS 'Result 1',
    PARSE('Fri, 20 July 2018' AS date) AS 'Result 2',
    PARSE('Friday, July 20 2018' AS date) AS 'Result 3',
    PARSE('Fri 20 Jul 18' AS date) AS 'Result 4';

Resultaat:

+------------+------------+------------+------------+
| Result 1   | Result 2   | Result 3   | Result 4   |
|------------+------------+------------+------------|
| 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 |
+------------+------------+------------+------------+

Het is echter niet paranormaal:

SELECT PARSE('Next Friday' AS date) 
AS 'Result';

Resultaat:

Error converting string value 'Next Friday' into data type date using culture ''. 

Een cultuur toevoegen

U kunt een derde argument toevoegen om aan te geven in welke cultuur uw tekenreeks is opgemaakt. Als uw datum bijvoorbeeld 01/06/2018 is , kan dit betekenen 6 januari 2018 of 1 juni 2018 , afhankelijk van de cultuur die wordt gebruikt.

Hier is een voorbeeld van het specificeren van de cultuur:

SELECT 
    PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US',
    PARSE('01/06/2018' AS date USING 'en-GB') AS 'en-GB';

Resultaat:

+------------+------------+
| en-US      | en-GB      |
|------------+------------|
| 2018-01-06 | 2018-06-01 |
+------------+------------+

Als u dit argument niet opgeeft, wordt de taal van de huidige sessie gebruikt.

De verkeerde weekdag bieden

De PARSE() functie is behoorlijk slim, in die zin dat als je de verkeerde weekdag opgeeft, er een fout wordt geretourneerd.

Dus als we dezelfde datum gebruiken als de vorige voorbeelden, maar we veranderen de weekdag van vrijdag in donderdag, dan gebeurt het volgende:

SELECT PARSE('Thursday, 20 July 2018' AS date) 
AS 'Result';

Resultaat:

Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.

  1. Krijg resultatenset van orakel opgeslagen procedure

  2. Perfect Storm voor het upgraden naar een moderne versie van SQL Server

  3. Voortgang bij online upgrade

  4. 3 manieren om decimaal naar hexadecimaal te converteren in SQL Server (T-SQL)