W SQL Server możesz użyć CONVERT()
funkcja do konwersji wartości daty z jednego typu danych daty na inny (lub między dowolnym innym typem danych w tym zakresie). Nie jest to jednak jedyna funkcja w zestawie narzędzi T-SQL do konwersji między typami danych.
CAST()
funkcja jest częścią standardu ANSI SQL i wykonuje większość rzeczy CONVERT()
robi. W wielu przypadkach masz więc możliwość wyboru, której z tych funkcji wolisz używać.
Wielu specjalistów od baz danych woli CAST()
ze względu na to, że jest częścią standardu ANSI SQL, jednak inni wolą CONVERT()
ze względu na dodatkową funkcjonalność oferowaną przez implementację T-SQL (np. możliwość dostarczenia stylu daty).
W każdym razie ten artykuł zawiera przykłady konwersji między różnymi formatami daty za pomocą CAST()
.
Składnia
Składnia wygląda tak:
CAST ( expression AS data_type [ ( length ) ] )
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
.
Przykład 1 – rzut SYSDATETIME() jako datę
W tym przykładzie generujemy bieżącą datę/czas za pomocą SYSDATETIME()
funkcji i rzutuj zwracaną wartość jako 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, CAST(SYSDATETIME() AS date) AS Converted;
Wynik:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Przykład 2 – rzut SYSDATETIME() jako smalldatetime
W tym przykładzie rzutujemy datę jako smalldatetime typ danych.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Wynik:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Przykład 3 – Rzuć SYSDATETIME() jako datetimeoffset
W tym przykładzie rzutujemy datę jako przesunięcie daty i godziny typ danych.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Wynik:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Przykład 4 – rzut SYSDATETIME() jako czas
Nie jesteś ograniczony do wyświetlania składnika daty wartości. Możesz też przesłać go jako czas typ danych, tak że zwracany jest tylko składnik czasu. Tak:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Wynik:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Przykład 5 – Rzuć SYSDATETIMEOFFSET() jako datę
Oto przykład użycia innej funkcji do wygenerowania oryginalnej wartości daty/godziny:
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Wynik:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Przykład 6 – Konwersja z zapytania do bazy danych
Oto przykład konwersji daty pobranej z kolumny w WideWorldImporters przykładowa baza danych:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) 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 | +-----------------------------+-------------+
Napisałem również post, który pokazuje, jak konwertować między formatami daty za pomocą CONVERT()
działać przy użyciu tych samych przykładów, co powyżej.