Понякога, когато работите с бази данни и други среди за програмиране, получавате стойност за дата, но тя е в грешен формат/тип данни. Например, ако дата е генерирана с вградена функция за дата, тя може да включва както датата, така и часа, чак до последната наносекунда. И всичко, което искате, е ден, месец и година, кажете така:2018-01-01.
Ако това се случи, докато използвате SQL сървър, можете да използвате CONVERT()
функция, за да го преобразувате в друг тип данни. Когато направите това, типът данни ще определи формата, в който се появява.
Тази статия предоставя примери за използване на CONVERT()
функция в SQL Server за преобразуване на стойност на дата в друг тип данни (дата).
Синтаксис
Първо, ето как върви официалният синтаксис:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Тези аргументи се дефинират, както следва:
expression
- Всякакъв валиден израз.
data_type
- Целевият тип данни. Това включва xml , голям и sql_variant . Типовете данни за псевдоним не могат да се използват.
length
- Незадължително цяло число, което определя дължината на целевия тип данни. Стойността по подразбиране е
30
. style
- Цялочислен израз, който указва как
CONVERT()
функцията ще преведе израз . За стойност на стил NULL се връща NULL. тип_данни определя обхвата.
Пример 1 – Преобразуване от SYSDATETIME() в тип данни за дата
В този пример ние генерираме текущата дата/час с SYSDATETIME()
функция и го преобразувайте в дата тип данни.
Имайте предвид, че SYSDATETIME()
генерира стойността си като datetime2(7) тип данни, така че ние ги преобразуваме от този тип данни в друг тип данни.
SELECT SYSDATETIME() AS Original, CONVERT(date, SYSDATETIME()) AS Converted;
Резултат:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Пример 2 – Преобразуване от SYSDATETIME() в тип данни smalldatetime
В този пример преобразуваме датата в smalldatetime тип данни.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Резултат:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Пример 3 – Преобразуване от SYSDATETIME() в datetimeoffset Тип данни
В този пример преобразуваме датата в datetimeoffset тип данни.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Резултат:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Пример 4 – Преобразуване от SYSDATETIME() във времеви тип данни
Не сте ограничени до показване на компонента за дата на стойността. Можете също да го преобразувате в време тип данни, така че да се връща само компонентът за време. Като това:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Резултат:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Пример 5 – Преобразуване от SYSDATETIMEOFFSET()
Всички предишни примери използват една и съща вградена функция за генериране на стойността за дата/час, но разбира се, не е необходимо тя да бъде генерирана от тази една функция. Ето пример за използване на SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Резултат:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Пример 6 – Преобразуване от заявка за база данни
Ето пример за преобразуване на датата, която е извлечена от колона в примерната база данни WideWorldImporters:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) 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()
за да конвертирате от низ в дата, както и всеки друг тип данни, към който може да се наложи да конвертирате.
Написах също публикация, която показва как да конвертирате между формати за дата с помощта на CAST()
функция, използвайки същите примери като по-горе.