Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak przekonwertować ciąg na datę/godzinę w SQL Server za pomocą PARSE()

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak codziennie uruchamiać procedurę składowaną w SQL Server Express Edition?

  2. Funkcja SQL Server ROUND():do czego służy i dlaczego powinno cię to obchodzić?

  3. Jak mogę wymusić w strukturze encji wstawianie kolumn tożsamości?

  4. Szybko wstawiaj 2 miliony wierszy do SQL Server

  5. SQL Server 2016:Utwórz login