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

Jak przekonwertować z jednego formatu daty na inny w programie SQL Server za pomocą funkcji CONVERT()

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MVC4:UserIsInRole — nie można połączyć się z bazą danych SQL Server

  2. Jak przywrócić bazę danych SQL Server na komputerze Mac przy użyciu Azure Data Studio

  3. Czy są jakieś wady, aby zawsze używać nvarchar(MAX)?

  4. Jak wykryć i powiązać zmiany między wartościami wierszy w tabeli SQL?

  5. Przecinki w danych CSV