Как преобразовать datetime в строку в T-SQL

Я удивлен, что не могу найти этот вопрос здесь уже.

У меня есть дата date var, и я хочу преобразовать его в строку, чтобы я мог добавить ее в другую строку. Я хочу, чтобы это было в формате, который можно легко преобразовать в дату.

Как я могу это сделать?

(Я хочу часть даты и часть времени.)

Ответ 1

Следующий запрос получит текущее время и преобразование в строку. со следующим форматом: yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 

Ответ 2

Существует много разных способов: convert a datetime в строку. Вот один из способов:

SELECT convert(varchar(25), getdate(), 121)  – yyyy-mm-dd hh:mm:ss.mmm

Смотрите Демо

Вот веб-сайт, на котором есть список всех преобразований:

Как форматировать дату и время в SQL Server

Ответ 3

Вы можете использовать оператор convert в Microsoft SQL Server для преобразования даты в строку. Пример используемого синтаксиса:

SELECT convert(varchar(20), getdate(), 120)

Вышеуказанное вернет текущую дату и время в строке с форматом YYYY-MM-DD HH:MM:SS в 24-часовых часах.

Вы можете изменить число в конце инструкции на один из многих, который изменит формат возвращаемых строк. Список этих кодов можно найти в MSDN в справочном разделе CAST и CONVERT.

Ответ 4

Существует 3 разных метода, в зависимости от того, что я - мое требование и какую версию я использую.

Вот методы.

1) Использование Convert

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2) Использование Cast (SQL Server 2008 и выше)

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3) Использование символьных данных с фиксированной длиной

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'

Ответ 5

В дополнение к функциям CAST и CONVERT в предыдущих ответах, если вы используете SQL Server 2012 и выше, вы используете FORMAT для преобразования типа DATETIME в строку.

Для преобразования назад используйте противоположные функции PARSE или TRYPARSE.

Стили форматирования основаны на .NET(аналогично параметрам форматирования строк метода ToString()) и имеют то преимущество, что они осведомлены о культуре. например.

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

Результаты:

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000

Ответ 7

Попробуйте следующее:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)

Ответ 8

SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101 - США - ММ/ДД/ГГГГ

108 - Время - ЧЧ: МИ: СС

112 - Дата - ГГГГММДД

121 - ODBC - ГГГГ-ММ-ДД ЧЧ: MI: SS.FFF

20 - ODBC - ГГГГ-ММ-ДД ЧЧ: МИ: СС

Ответ 9

На это ответили многие люди, но я чувствую, что самое простое решение было опущено.

SQL SERVER (я полагаю, что 2012+) имеет неявные строковые эквиваленты для DATETIME2, как показано здесь

Посмотрите на раздел "Поддерживаемые строковые литеральные форматы для datetime2"

Чтобы ответить на вопрос ОП явно:

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

выход:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

Примечание. Первая переменная (myVar) также содержит значение '2019-01-23 12:24:00.0000000'. Он просто отформатирован Jan 23 2019 12:24PM из-за установленного по умолчанию форматирования для SQL SERVER, который вызывается при использовании PRINT. Не запутайтесь здесь, фактическая строка в (myVer)= '2019-01-23 12:24:00.0000000'