Я удивлен, что не могу найти здесь этот вопрос.
У меня есть переменная даты и времени, и я хочу преобразовать ее в строку, чтобы добавить ее в другую строку. Я хочу, чтобы он был в формате, который можно легко преобразовать обратно в дату и время.
Как я могу это сделать?
(Мне нужна часть даты и часть времени.)
sql-server
tsql
cja
источник
источник
Convert
, дважды щелкните, чтобы выделить, нажмите Shift + F1 ... всегда первая линия защиты.Ответы:
Следующий запрос получит текущую дату и время и преобразует ее в строку. со следующим форматом
yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar(25), getdate(), 120)
источник
DateTimeOffSet
не забудьте отрегулироватьvarchar
длину так, как вы хотите, чтобы результат выглядел. Для меня мне не нужен часовой пояс, поэтому мне пришлось использоватьSELECT convert(varchar(19), sysdatetimeoffset(), 120)
Есть много различных способов на строку. Вот один из способов:
convert
datetime
SELECT convert(varchar(25), getdate(), 121) – yyyy-mm-dd hh:mm:ss.mmm
См. Демонстрацию
Вот веб-сайт, на котором есть список всех конверсий:
Как форматировать дату, время и дату в SQL Server
источник
Вы можете использовать
convert
инструкцию в Microsoft SQL Server для преобразования даты в строку. Пример используемого синтаксиса:SELECT convert(varchar(20), getdate(), 120)
Вышеупомянутое вернет текущую дату и время в виде строки
YYYY-MM-DD HH:MM:SS
в 24-часовом формате.Вы можете изменить число в конце оператора на одно из многих, что изменит формат возвращаемых строк. Список этих кодов можно найти на MSDN в справочном разделе CAST и CONVERT .
источник
Есть 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'
источник
В дополнении к
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')
Полученные результаты:
источник
The format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
Проверьте синтаксис CAST и CONVERT t-sql:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
источник
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'
101 - США - ММ / ДД / ГГГГ
108 - Время - ЧЧ: МИ: СС
112 - Дата - ГГГГММДД
121 - ODBC - ГГГГ-ММ-ДД ЧЧ: MI: SS.FFF
20 - ODBC - ГГГГ-ММ-ДД ЧЧ: MI: SS
источник
На этот вопрос ответило множество людей, но я чувствую, что самое простое решение было упущено.
SQL SERVER (я считаю, что это 2012+) имеет неявные строковые эквиваленты для DATETIME2, как показано здесь
См. Раздел «Поддерживаемые форматы строковых литералов для datetime2»
Чтобы ответить на вопрос OPs явно:
DECLARE @myVar NCHAR(32) DECLARE @myDt DATETIME2 SELECT @myVar = @GETDATE() SELECT @myDt = @myVar PRINT(@myVar) PRINT(@myDt)
выход:
Примечание: первая переменная (
myVar
) на самом деле также содержит значение'2019-01-23 12:24:00.0000000'
. Он просто форматируетсяJan 23 2019 12:24PM
из-за набора форматирования по умолчанию для SQL SERVER, который вызывается при использованииPRINT
. Не запутайтесь, фактическая строка в(myVer)
='2019-01-23 12:24:00.0000000'
источник
Попробуйте ниже:
DECLARE @myDateTime DATETIME SET @myDateTime = '2013-02-02' -- Convert to string now SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
источник