Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да конвертирате между формати на дата в SQL Server с помощта на CAST()

В SQL Server можете да използвате CONVERT() функция за преобразуване на стойност на дата от един тип данни за дата в друг (или между всеки друг тип данни по този въпрос). Това обаче не е единствената функция в кутията с инструменти на T-SQL за конвертиране между типове данни.

CAST() функцията е част от стандарта ANSI SQL и прави повечето от нещата CONVERT() прави. Така че в много случаи имате избор коя от тези функции предпочитате да използвате.

Много специалисти по бази данни предпочитат CAST() поради факта, че е част от стандарта ANSI SQL, обаче, други предпочитат CONVERT() поради допълнителната функционалност, която внедряването на T-SQL предлага (като например възможността да предостави стил за дата).

Във всеки случай, тази статия предоставя примери за преобразуване между различни формати на дата с помощта на CAST() .

Синтаксис

Синтаксисът е така:

CAST ( expression AS data_type [ ( length ) ] )

Тези аргументи се дефинират, както следва:

expression
Всякакъв валиден израз.
data_type
Целевият тип данни. Това включва xmlголям и sql_variant . Типовете данни за псевдоним не могат да се използват.
length
Незадължително цяло число, което определя дължината на целевия тип данни. Стойността по подразбиране е 30 .

Пример 1 – Прехвърляне на SYSDATETIME() като дата

В този пример ние генерираме текущата дата/час с SYSDATETIME() функция и прехвърля връщаната стойност като дата тип данни.

Имайте предвид, че SYSDATETIME() генерира стойността си като datetime2(7) тип данни, така че ние ги преобразуваме от този тип данни в друг тип данни.

SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS date) AS Converted;

Резултат:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-07 00:15:32.9265884 | 2018-06-07  |
+-----------------------------+-------------+

Пример 2 – Прехвърляне на SYSDATETIME() като smalldatetime

В този пример прехвърляме датата като smalldatetime тип данни.

SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS smalldatetime) AS Converted;

Резултат:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 |
+-----------------------------+---------------------+

Пример 3 – Прехвърляне на SYSDATETIME() като datetimeoffset

В този пример прехвърляме датата като datetimeoffset тип данни.

SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS datetimeoffset) AS Converted;

Резултат:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 |
+-----------------------------+------------------------------------+

Пример 4 – Прехвърляне на SYSDATETIME() като време

Не сте ограничени до показване на компонента за дата на стойността. Можете също да го предавате като време тип данни, така че да се връща само компонентът за време. Като това:

SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS time) AS Converted;

Резултат:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 |
+-----------------------------+------------------+

Пример 5 – Прехвърляне на SYSDATETIMEOFFSET() като дата

Ето пример за използване на различна функция за генериране на оригиналната стойност за дата/час:

SELECT 
    SYSDATETIMEOFFSET() AS Original,
    CAST(SYSDATETIMEOFFSET() AS date) AS Converted;

Резултат:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

Пример 6 – Преобразуване от заявка за база данни

Ето пример за преобразуване на датата, която е извлечена от колона в WideWorldImporters примерна база данни:

USE WideWorldImporters;
SELECT DISTINCT TOP 10 
    LastEditedWhen, 
    CAST(LastEditedWhen AS date) AS 'Converted'
FROM Sales.CustomerTransactions;

Резултат:

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

Написах също публикация, която показва как да конвертирате между формати на дата с помощта на CONVERT() функция, използвайки същите примери като по-горе.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разделете стойността на една колона на няколко стойности на колони

  2. Разбиране на Always ON Availability Group между Linux-базирани екземпляри на SQL сървър. Част 1

  3. Архивиране на SQL Server 2017 -1

  4. Как да активирате всички ограничения за проверка и външни ключове в база данни в SQL Server (примери за T-SQL)

  5. База данни + удостоверяване на Windows + потребителско име/парола?