sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man konverterar en sträng till ett datum/tid i SQL Server med hjälp av PARSE()

Om du arbetar med SQL Server är chansen stor att du har använt minst en av CONVERT() eller CAST() funktioner för att konvertera från en datatyp till en annan. Om du någonsin har stött på ett fel när du försökte konvertera en sträng till en datatyp för datum/tid, visas PARSE() funktion kan vara vad du behöver.

Om du till exempel har en sträng som säg, fre, 20 juli 2018 , CONVERT() eller CAST() funktioner kommer att ge ett fel. Men PARSE() funktionen kommer att hantera det utan problem.

PARSE() funktion returnerar resultatet av ett uttryck, översatt till den begärda datatypen i SQL Server. Så du kan använda den för att "översätta" ditt strängvärde till en datatyp för datum/tid (som datum , datumtid , datetime2 , etc).

Syntax

Här är syntaxen för PARSE() funktion:

PARSE ( string_value AS data_type [ USING culture ] )

Där string_value är värdet du vill ska analyseras, data_type är den datatyp du vill att den ska analyseras till, och culture är ett valfritt argument som du kan använda för att ange vilket språkformat som ska användas när strängen analyseras.

Grundläggande exempel

Här är ett grundläggande exempel för att demonstrera användningen.

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

Resultat:

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

Ta bort tidsdelen

I föregående exempel specificerade vi att strängen skulle tolkas som en datetime2 data typ. Denna datatyp inkluderar tidskomponenten med hög precision. Om du inte behöver tidskomponenten kan du alltid analysera den som ett datum datatyp.

Här är resultatet om vi anger ett datum datatyp:

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

Resultat:

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

Behåll tidsdelen, men med mindre precision

Och om du gör behöver tid, men med mindre precision kan du alltid använda smalldatetime datatyp:

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

Resultat:

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

Men om det inte är tillräckligt exakt finns det alltid datumtid datatyp:

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

Resultat:

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

Variationer av datuminmatningen

PARSE() funktion kan vanligtvis räkna ut datumet du försöker konvertera, så länge du tillhandahåller det som en giltig representation av den begärda datatypen. Här är några exempel på att datumet tillhandahålls i olika stilar:

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';

Resultat:

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

Det är dock inte psykiskt:

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

Resultat:

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

Lägg till en kultur

Du kan lägga till ett tredje argument för att ange vilken kultur din sträng är formaterad i. Till exempel, om ditt datum är 01/06/2018 , detta kan antingen betyda 6 januari 2018 eller 1 juni 2018 , beroende på vilken kultur som används.

Här är ett exempel på att specificera kulturen:

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';

Resultat:

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

Om du inte anger detta argument används språket för den aktuella sessionen.

Ange fel veckodag

PARSE() Funktionen är ganska smart, eftersom om du anger fel veckodag kommer den att returnera ett fel.

Så om vi använder samma datum som de tidigare exemplen, men vi ändrar veckodagen från fredag ​​till torsdag, händer det här:

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

Resultat:

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

  1. xampp MySQL startar inte

  2. SQL Server AlwaysOn ( Availability Group ) Arkitektur och steg för steg installation -2

  3. Proaktiva SQL Server Health Checks, Del 3:Inställningar för instans och databas

  4. IntentService fryser mitt applikationsgränssnitt