sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan konverteres en streng til en dato/tid i SQL Server ved hjælp af PARSE()

Hvis du arbejder med SQL Server, er der stor sandsynlighed for, at du har brugt mindst én af CONVERT() eller CAST() funktioner til at konvertere fra en datatype til en anden. Hvis du nogensinde er stødt på en fejl under forsøget på at konvertere en streng til en dato/klokkeslæt datatype, skal PARSE() funktion kunne være, hvad du har brug for.

Hvis du f.eks. har en streng som f.eks. siger fredag ​​20. juli 2018 , CONVERT() eller CAST() funktioner vil give en fejl. Men PARSE() funktion vil håndtere det uden problemer.

PARSE() funktion returnerer resultatet af et udtryk, oversat til den anmodede datatype i SQL Server. Så du kan bruge den til at "oversætte" din strengværdi til en dato/klokkeslæt datatype (såsom dato , datotid , datetime2 osv.).

Syntaks

Her er syntaksen for PARSE() funktion:

PARSE ( string_value AS data_type [ USING culture ] )

Hvor string_value er den værdi, du ønsker at blive parset, data_type er den datatype, du vil have den parset ind i, og culture er et valgfrit argument, som du kan bruge til at angive, hvilket sprogformat der skal bruges, når strengen analyseres.

Grundlæggende eksempel

Her er et grundlæggende eksempel til at demonstrere brugen.

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

Resultat:

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

Fjern tidsdelen

I det forrige eksempel specificerede vi, at strengen skulle parses som en datetime2 datatype. Denne datatype inkluderer tidskomponenten med høj præcision. Hvis du ikke har brug for tidskomponenten, kan du altid parse den som en dato datatype.

Her er resultatet, hvis vi angiver en dato datatype:

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

Resultat:

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

Behold tidsdelen, men med mindre præcision

Og hvis du gør har brug for tid, men med mindre præcision kan du altid bruge smalldatetime datatype:

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

Resultat:

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

Men hvis det ikke er præcist nok, er der altid datoen datatype:

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

Resultat:

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

Variationer af datoinput

PARSE() funktion kan normalt beregne den dato, du forsøger at konvertere, så længe du angiver den som en gyldig repræsentation af den anmodede datatype. Her er nogle eksempler på, at datoen leveres i forskellige stilarter:

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 er dog ikke psykisk:

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

Resultat:

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

Tilføj en kultur

Du kan tilføje et tredje argument for at angive, hvilken kultur din streng er formateret i. Hvis din dato f.eks. er 01/06/2018 , kan dette enten betyde 6. januar 2018 eller 1. juni 2018 , afhængigt af den anvendte kultur.

Her er et eksempel på at specificere 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 |
+------------+------------+

Hvis du ikke angiver dette argument, bruges sproget for den aktuelle session.

Giv den forkerte ugedag

PARSE() Funktionen er ret smart, idet den, hvis du angiver den forkerte ugedag, returnerer en fejl.

Så hvis vi bruger samme dato som de foregående eksempler, men vi ændrer ugedagen fra fredag ​​til torsdag, sker der sådan her:

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. Returner kolonneoplysninger fra en sammenkædet server i SQL Server (T-SQL-eksempler)

  2. Hvordan finder man forskelle s/h TIMESTAMP-formatværdier i Oracle?

  3. ORA-38868

  4. Sådan får du row_number i MySQL