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

Jak wyodrębnić lub przekonwertować dane czasu z ciągu w SQL Server

Problem:

Chcesz przekonwertować ciąg znaków zawierający datę i godzinę na wartość CZAS w SQL Server.

Musimy przekonwertować ciąg zawierający nazwę dnia tygodnia, datę i godzinę na wartość CZAS.

Rozwiązanie 1:

Użyjemy PARSE() funkcjonować. Oto zapytanie, które możesz napisać:

SELECT 
  PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Oto wynik:

11:23:11.1134505

Dyskusja:

Użyj PARSE() funkcja konwertująca ciąg znaków zawierający nazwę dnia tygodnia, datę i godzinę na typ danych TIME. Ta funkcja pobiera ciąg do konwersji, słowo kluczowe AS i nowy typ danych (w naszym przykładzie TIME ). Ciąg powinien zawierać wartość, która reprezentuje ten typ danych. W naszym przykładzie ciąg 'February 2, 2020 11:23:11.1134505' przechowuje wartość czasu.

Zauważ, że godzina jest tylko częścią tego ciągu, który zawiera również nazwę dnia tygodnia. Nie używaj CONVERT() lub CAST() funkcje w tym przypadku; zwracają również typ danych CZAS, ale bez dnia tygodnia.

Jeśli używasz języka mówionego, który różni się od języka serwera, dołącz słowo kluczowe USING i odpowiedni kod kultury. Po polsku piszesz:

SELECT 
  PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) 
  AS time_value;

Więcej informacji na temat wartości parametrów kultury można znaleźć w oficjalnej dokumentacji SQL Server.

W takim przypadku powinieneś użyć PARSE() funkcja, nawet jeśli nie ma najlepszej wydajności. Jeśli operujesz na łańcuchu reprezentującym wartość czasu, której nie przechowuj dodatkowe dane (takie jak nazwa dnia tygodnia), użyj CASE() funkcjonować. Oto przykład.

Rozwiązanie 2:

SELECT 
  CAST('2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Oto wynik:

11:23:11.1134505

Ciąg zawierający datę i godzinę do przekonwertowania musi mieć format danych typu data i godzina T-SQL. Możesz przeczytać więcej w dokumentacji SQL Server.

CAST() funkcja jest ANSI SQL Standard, a jej wydajność jest lepsza niż CONVERT() lub PARSE() .

Na koniec możesz również użyć CONVERT() funkcjonować. Spójrz na następny przykład.

Rozwiązanie 3:

  SELECT 
  CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') 
  AS time_value;

Wynik:

11:23:11.1134505

CONVERT() funkcja przyjmuje trzy argumenty:nowy typ danych, ciąg do konwersji i (opcjonalny) żądany format. Jednak powinieneś używać tej funkcji tylko wtedy, gdy musisz określić sposób formatowania danych daty i czasu, ponieważ jej wydajność nie jest tak dobra jak CAST() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywanie i analiza dokumentów w systemie plików Windows za pomocą wyszukiwania semantycznego SQL Server — część 2

  2. Utwórz bazę danych w SQL Server 2017

  3. Utwórz harmonogram agentów SQL Server za pomocą T-SQL

  4. SQL Server bcp Utility i numeryczny typ danych

  5. Jak wygenerować instrukcję Drop Table dla wszystkich tabel w bazie danych — SQL Server / T-SQL Tutorial, część 48