Ако работите със SQL Server, има вероятност да сте използвали поне един от CONVERT()
или CAST()
функции за преобразуване от един тип данни в друг. Ако някога сте срещали грешка, докато се опитвате да преобразувате низ в тип данни за дата/час, PARSE()
функцията може да е това, от което се нуждаете.
Например, ако имате низ като да речем, пет, 20 юли 2018 г. , CONVERT()
или CAST()
функции ще изведат грешка. Но PARSE()
функцията ще се справи без проблем.
PARSE()
функцията връща резултата от израз, преведен към искания тип данни в SQL Server. Така че можете да го използвате, за да „преведете“ стойността на низа си в тип данни за дата/час (като дата , дата и час , дата и час2 и др.).
Синтаксис
Ето синтаксиса за PARSE()
функция:
PARSE ( string_value AS data_type [ USING culture ] )
Където string_value
е стойността, която искате да бъде анализирана, data_type
е типът данни, в който искате да бъде анализиран, и culture
е незадължителен аргумент, който можете да използвате, за да укажете кой езиков формат да използвате, когато анализирате низа.
Основен пример
Ето основен пример за демонстриране на употреба.
SELECT PARSE('Friday, 20 July 2018' AS datetime2) AS 'Result';
Резултат:
+-----------------------------+ | Result | |-----------------------------| | 2018-07-20 00:00:00.0000000 | +-----------------------------+
Премахнете частта за време
В предишния пример посочихме, че низът трябва да бъде анализиран като datetime2 тип данни. Този тип данни включва времевия компонент с висока точност. Ако не се нуждаете от компонента за време, винаги можете да го анализирате като дата тип данни.
Ето резултата, ако посочим дата тип данни:
SELECT PARSE('Friday, 20 July 2018' AS date) AS 'Result';
Резултат:
+------------+ | Result | |------------| | 2018-07-20 | +------------+
Запазете частта за времето, но с по-малко прецизност
И ако направите се нуждаете от време, но с по-малко прецизност винаги можете да използвате smalldatetime тип данни:
SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) AS 'Result';
Резултат:
+---------------------+ | Result | |---------------------| | 2018-07-20 14:36:00 | +---------------------+
Но ако това не е достатъчно точно, винаги има дата и час тип данни:
SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) AS 'Result';
Резултат:
+-------------------------+ | Result | |-------------------------| | 2018-07-20 14:35:50.523 | +-------------------------+
Варианти на въвеждането на дата
PARSE()
функцията обикновено може да изчисли датата, която се опитвате да конвертирате, стига да я предоставите като валидно представяне на искания тип данни. Ето някои примери за датата, предоставена в различни стилове:
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';
Резултат:
+------------+------------+------------+------------+ | Result 1 | Result 2 | Result 3 | Result 4 | |------------+------------+------------+------------| | 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 | +------------+------------+------------+------------+
Това обаче не е психично:
SELECT PARSE('Next Friday' AS date) AS 'Result';
Резултат:
Error converting string value 'Next Friday' into data type date using culture ''.
Добавяне на култура
Можете да добавите трети аргумент, за да посочите в коя култура е форматиран низът ви. Например, ако датата ви е 01/06/2018
, това може да означава или 6 януари 2018 г. или 1 юни 2018 г. , в зависимост от използваната култура.
Ето пример за определяне на културата:
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';
Резултат:
+------------+------------+ | en-US | en-GB | |------------+------------| | 2018-01-06 | 2018-06-01 | +------------+------------+
Ако не предоставите този аргумент, се използва езикът на текущата сесия.
Предоставяне на грешен делничен ден
PARSE()
функцията е доста интелигентна, тъй като ако посочите грешен ден от седмицата, тя ще върне грешка.
Така че, ако използваме същата дата като предишните примери, но променим делника от петък на четвъртък, ето какво се случва:
SELECT PARSE('Thursday, 20 July 2018' AS date) AS 'Result';
Резултат:
Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.