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

Jak konwertować między formatami dat w SQL Server za pomocą CAST()

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 xmldużysql_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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Typowe wpadki serwera SQL

  2. Różnica między podzapytaniem a skorelowanym podzapytaniem

  3. Łączenie się z SQL Server LocalDB za pomocą JDBC

  4. Optymalizacja wydajności XML serwera XML

  5. Jak przekonwertować ciąg na datę/godzinę w SQL Server za pomocą funkcji CONVERT()