Как преобразовать String в Date в T-SQL?Как преобразовать строку на сегодняшний день T-SQL?
Мой тест является строка: '24.04.2012'
Как преобразовать String в Date в T-SQL?Как преобразовать строку на сегодняшний день T-SQL?
Мой тест является строка: '24.04.2012'
CONVERT(datetime, '24.04.2012', 104)
Если сделать трюк. Смотрите здесь для получения дополнительной информации: "CAST and CONVERT (Transact-SQL)"
CONVERT(DateTime, DateField, 104)
'24-04- 2012' не будет признанный как действительная дата, потому что он будет ожидать 'MM-dd-yyyy' – Khan
как насчет' CONVERT (DateTime, DateField, 104) '? Это должно сказать sql-серверу использовать формат dd.mm.yyyy ... – therealmitchconnors
Да, это работает, я тоже нашел, спасибо! –
Вы можете использовать:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Ссылка: CAST and CONVERT (Transact-SQL)
Хотя CONVERT вещь работает, вы на самом деле не должны использовать его. Вы должны спросить себя, почему вы разбираете строковые значения в SQL-Server. Если это одноразовое задание, в котором вы вручную исправляете некоторые данные, вы не получите эти данные в другой раз, это нормально, но если какое-либо приложение использует это, вы должны что-то изменить. Лучшим способом было бы использовать тип данных «дата». Если это пользовательский ввод, это еще хуже. Затем сначала нужно выполнить проверку клиента. Если вы действительно хотите передавать строковые значения, где SQL-Server ожидает дату, вы всегда можете использовать формат ISO («YYYYMMDD»), и он должен автоматически преобразовываться.
Что касается ситуации, когда вы импортируете файлы данных из какой-либо внешней системы, а входной столбец находится в одном из этих форматов, например.«05/31/2013», но который входит в строку? И вы пишете, скажем, хранимую процедуру для импорта этих данных или используя SSIS для ее импорта? Тогда CONVERT будет подходящей вещью для использования, не так ли? –
Не обязательно, в ситуациях, когда модели аналитических данных хоста MS SQL Server, в отличие от транзакционных, вполне нормально использовать CONVERT, потому что он должен иметь дело с большим количеством внешних источников, которые не были бы легко доступны в качестве даты типа (как указывал Дэвид Барроуз выше). – Will
Формат строкового литерала по умолчанию для даты - [ГГГГ-ММ-ДД] (https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql) –
Вот решение, которое хорошо работает. Основное утверждение содержит разбор Try-рядный:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Вот что мы реализовали в серийной версии:
UPDATE dbo.StagingInputReview
SET ReviewedOn =
ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
-- Check for empty/null/'NULL' text
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
Столбцы ModifiedOn и ModifiedBy только для внутренних целей отслеживания базы данных.
Смотрите также эти ссылки Microsoft MSDN:
Мы используем этот в производственном кодексе. – MAbraham1
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
будет делать то, что требуется, результат:
2012-04-24 00:00:00.000
Не работает. TSQL показывает эту ошибку: неправильный синтаксис рядом с ключевым словом «CONVERT». – pordi
Удалите пространство между CONVERT и parn's: CONVERT (datetime, '24 .04.2012 ', 104) – MAbraham1
Как поясняется в связанном документе, «104» указывает на форматирование входной строки. – DCShannon