Czasami podczas pracy z bazami danych i innymi środowiskami programistycznymi otrzymujesz wartość daty, ale ma ona niewłaściwy format/typ danych. Na przykład, jeśli data została wygenerowana za pomocą wbudowanej funkcji daty, może zawierać zarówno datę, jak i godzinę, z dokładnością do ostatniej nanosekundy. A wszystko, czego chcesz, to dzień, miesiąc i rok, powiedz tak:2018-01-01.
Jeśli tak się stanie podczas korzystania z programu SQL Server, możesz użyć funkcji CONVERT()
funkcji, aby przekonwertować go na inny typ danych. Gdy to zrobisz, typ danych określi format, w jakim będą się pojawiać.
Ten artykuł zawiera przykłady użycia CONVERT()
w SQL Server do konwersji wartości daty na inny typ danych (data).
Składnia
Po pierwsze, oto jak wygląda oficjalna składnia:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Te argumenty są zdefiniowane w następujący sposób:
expression
- Dowolne prawidłowe wyrażenie.
data_type
- Docelowy typ danych. Obejmuje to xml , duży i sql_variant . Nie można używać typów danych aliasów.
length
- Opcjonalna liczba całkowita, która określa długość docelowego typu danych. Domyślna wartość to
30
. style
- Wyrażenie całkowite, które określa, w jaki sposób
CONVERT()
funkcja przetłumaczy wyrażenie . Dla wartości stylu NULL zwracana jest wartość NULL. typ_danych określa zakres.
Przykład 1 – Konwersja z SYSDATETIME() na typ danych daty
W tym przykładzie generujemy bieżącą datę/czas za pomocą SYSDATETIME()
funkcji i przekonwertuj ją na datę typ danych.
Zauważ, że SYSDATETIME()
generuje swoją wartość jako datetime2(7) typ danych, więc konwertujemy go z tego typu danych na inny typ danych.
SELECT SYSDATETIME() AS Original, CONVERT(date, SYSDATETIME()) AS Converted;
Wynik:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Przykład 2 – Konwersja z SYSDATETIME() na typ danych smalldatetime
W tym przykładzie konwertujemy datę na smalldatetime typ danych.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Wynik:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Przykład 3 – Konwersja z SYSDATETIME() na typ danych datetimeoffset
W tym przykładzie konwertujemy datę na przesunięcie daty i godziny typ danych.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Wynik:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Przykład 4 – Konwersja z SYSDATETIME() na typ danych czasu
Nie jesteś ograniczony do wyświetlania składnika daty wartości. Możesz także przekonwertować go na czas typ danych, tak że zwracany jest tylko składnik czasu. Tak:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Wynik:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Przykład 5 – Konwersja z SYSDATETIMEOFFSET()
Wszystkie poprzednie przykłady używają tej samej wbudowanej funkcji do generowania wartości daty/czasu, ale oczywiście nie musi być ona generowana przez tę jedną funkcję. Oto przykład użycia SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Wynik:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Przykład 6 – Konwersja z zapytania do bazy danych
Oto przykład konwersji daty pobranej z kolumny w przykładowej bazie danych WideWorldImporters:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) AS 'Converted' FROM Sales.CustomerTransactions;
Wynik:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
Pamiętaj, że nie ograniczasz się tylko do konwersji między dwoma różnymi formatami daty. Jeśli na przykład masz datę zapisaną jako ciąg, możesz również użyć CONVERT()
do konwersji z ciągu znaków na datę, a także na każdy inny typ danych, na który może być konieczna konwersja.
Napisałem również post, który pokazuje, jak konwertować między formatami dat za pomocą CAST()
działać, korzystając z tych samych przykładów, co powyżej.