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