Jeśli pracujesz z SQL Server, prawdopodobnie użyłeś co najmniej jednego z CONVERT()
lub CAST()
funkcje do konwersji z jednego typu danych na inny. Jeśli kiedykolwiek napotkałeś błąd podczas próby konwersji ciągu na typ danych typu data/godzina, funkcja PARSE()
funkcja może być tym, czego potrzebujesz.
Na przykład, jeśli masz ciąg taki jak powiedz, piątek, 20 lipca 2018 , CONVERT()
lub CAST()
funkcje zgłoszą błąd. Ale PARSE()
funkcja poradzi sobie z tym bez problemu.
PARSE()
funkcja zwraca wynik wyrażenia, przetłumaczony na żądany typ danych w SQL Server. Możesz go więc użyć do „przetłumaczenia” wartości ciągu na typ danych typu data/godzina (taki jak data , data i godzina , datagodzina2 itp.).
Składnia
Oto składnia PARSE()
funkcja:
PARSE ( string_value AS data_type [ USING culture ] )
Gdzie string_value
to wartość, którą chcesz przeanalizować, data_type
to typ danych, który chcesz przeanalizować, oraz culture
jest opcjonalnym argumentem, którego można użyć do określenia formatu języka używanego podczas analizowania ciągu.
Przykład podstawowy
Oto podstawowy przykład demonstrujący użycie.
SELECT PARSE('Friday, 20 July 2018' AS datetime2) AS 'Result';
Wynik:
+-----------------------------+ | Result | |-----------------------------| | 2018-07-20 00:00:00.0000000 | +-----------------------------+
Usuń część czasu
W poprzednim przykładzie określiliśmy, że ciąg powinien być analizowany jako datetime2 typ danych. Ten typ danych zawiera składnik czasu z dużą precyzją. Jeśli nie potrzebujesz składnika czasu, zawsze możesz przeanalizować go jako datę typ danych.
Oto wynik, jeśli określimy datę typ danych:
SELECT PARSE('Friday, 20 July 2018' AS date) AS 'Result';
Wynik:
+------------+ | Result | |------------| | 2018-07-20 | +------------+
Zachowaj część czasu, ale z mniejszą precyzją
A jeśli tak potrzebujesz czasu, ale z mniejszą precyzją zawsze możesz użyć smalldatetime typ danych:
SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) AS 'Result';
Wynik:
+---------------------+ | Result | |---------------------| | 2018-07-20 14:36:00 | +---------------------+
Ale jeśli to nie jest wystarczająco precyzyjne, zawsze jest data i godzina typ danych:
SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) AS 'Result';
Wynik:
+-------------------------+ | Result | |-------------------------| | 2018-07-20 14:35:50.523 | +-------------------------+
Odmiany wprowadzania daty
PARSE()
funkcja może zwykle obliczyć datę, którą próbujesz przekonwertować, o ile podasz ją jako prawidłową reprezentację żądanego typu danych. Oto kilka przykładów daty podawanej w różnych stylach:
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';
Wynik:
+------------+------------+------------+------------+ | Result 1 | Result 2 | Result 3 | Result 4 | |------------+------------+------------+------------| | 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 | +------------+------------+------------+------------+
Jednak to nie jest psychiczne:
SELECT PARSE('Next Friday' AS date) AS 'Result';
Wynik:
Error converting string value 'Next Friday' into data type date using culture ''.
Dodaj kulturę
Możesz dodać trzeci argument, aby określić, w jakiej kulturze jest sformatowany Twój ciąg. Na przykład, jeśli Twoja data to 01/06/2018
, może to oznaczać 6 stycznia 2018 r. lub 1 czerwca 2018 r. , w zależności od używanej kultury.
Oto przykład określenia 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';
Wynik:
+------------+------------+ | en-US | en-GB | |------------+------------| | 2018-01-06 | 2018-06-01 | +------------+------------+
Jeśli nie podasz tego argumentu, używany jest język bieżącej sesji.
Podawanie niewłaściwego dnia tygodnia
PARSE()
funkcja jest całkiem sprytna, ponieważ jeśli podasz zły dzień tygodnia, zwróci błąd.
Jeśli więc użyjemy tej samej daty co w poprzednich przykładach, ale zmienimy dzień tygodnia z piątku na czwartek, oto co się dzieje:
SELECT PARSE('Thursday, 20 July 2018' AS date) AS 'Result';
Wynik:
Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.