sql >> Databáze >  >> RDS >> Sqlserver

Jak převést řetězec na datum/čas na serveru SQL pomocí PARSE()

Pokud pracujete s SQL Serverem, je pravděpodobné, že jste použili alespoň jeden z CONVERT() nebo CAST() funkce pro převod z jednoho datového typu na jiný. Pokud jste někdy při pokusu o převod řetězce na datový typ datum/čas narazili na chybu, PARSE() funkce může být to, co potřebujete.

Pokud máte například řetězec jako řekněme Pá, 20. července 2018 , CONVERT() nebo CAST() funkce vyvolá chybu. Ale PARSE() funkce to zvládne bez problémů.

PARSE() Funkce vrací výsledek výrazu přeložený na požadovaný datový typ v SQL Server. Můžete jej tedy použít k „překladu“ hodnoty řetězce do datového typu datum/čas (např. date , datum a čas , datetime2 , atd.).

Syntaxe

Zde je syntaxe pro PARSE() funkce:

PARSE ( string_value AS data_type [ USING culture ] )

Kde string_value je hodnota, kterou chcete analyzovat, data_type je datový typ, do kterého je chcete analyzovat, a culture je volitelný argument, který můžete použít k určení formátu jazyka, který se má použít při analýze řetězce.

Základní příklad

Zde je základní příklad pro demonstraci použití.

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

Výsledek:

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

Odstranění časové části

V předchozím příkladu jsme zadali, že řetězec by měl být analyzován jako datetime2 datový typ. Tento datový typ zahrnuje časovou složku s vysokou přesností. Pokud časovou složku nepotřebujete, můžete ji vždy analyzovat jako datum datový typ.

Zde je výsledek, pokud zadáme datum datový typ:

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

Výsledek:

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

Zachovejte část času, ale s menší přesností

A pokud uděláte potřebujete čas, ale s menší přesností můžete vždy použít smalldatetime datový typ:

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

Výsledek:

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

Pokud to však není dostatečně přesné, vždy je k dispozici datum a čas datový typ:

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

Výsledek:

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

Varianty zadání data

PARSE() Funkce obvykle dokáže zjistit datum, které se pokoušíte převést, pokud jej poskytnete jako platnou reprezentaci požadovaného datového typu. Zde je několik příkladů zobrazení data v různých stylech:

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

Výsledek:

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

Není to však psychické:

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

Výsledek:

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

Přidat kulturu

Můžete přidat třetí argument, který určí, ve které kultuře je váš řetězec naformátován. Pokud je například vaše datum 01/06/2018 , může to znamenat buď 6. ledna 2018 nebo 1. června 2018 , v závislosti na použité kultuře.

Zde je příklad určení kultury:

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

Výsledek:

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

Pokud tento argument neuvedete, použije se jazyk aktuální relace.

Uvedení nesprávného dne v týdnu

PARSE() funkce je docela chytrá v tom, že pokud zadáte špatný den v týdnu, vrátí chybu.

Pokud tedy použijeme stejné datum jako v předchozích příkladech, ale změníme pracovní den z pátku na čtvrtek, stane se toto:

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

Výsledek:

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

  1. Jak zkrátit tabulku v MySQL

  2. Prozkoumání GUI úložiště dotazů SQL Server 2016

  3. Jak nainstalovat PostgreSQL 12 na Ubuntu 20.04/18.04/16.04

  4. Jaké jsou rozdíly mezi transformacemi Merge Join a Lookup v SSIS?