В 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()
функция, използвайки същите примери като по-горе.