6 ответов:
CONVERT(datetime, '24.04.2012', 104)должен сделать трюк. Смотрите здесь для получения дополнительной информации: " приведение и преобразование (Transact-SQL)"
вот решение, которое работает хорошо. Основное утверждение содержит в линию попробовать-разобрать:
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:
хотя преобразование вещь работает, вы на самом деле не должны использовать его. Вы должны спросить себя, почему вы анализируете строковые значения в SQL-Server. Если это одноразовое задание, в котором вы вручную фиксируете некоторые данные, вы не получите эти данные в другой раз, это нормально, но если какое-либо приложение использует это, вы должны что-то изменить. Лучшим способом было бы использовать тип данных "дата". Если это пользовательский ввод, это еще хуже. Затем вы должны сначала сделать некоторые проверки в клиенте. Если вы действительно хотите передайте строковые значения, где SQL-сервер ожидает дату, вы всегда можете использовать формат ISO ('YYYYMMDD'), и он должен автоматически преобразовываться.
CONVERT(DateTime, ExpireDate, 121) AS ExpireDateбудет делать то, что нужно, результат:
2012-04-24 00:00:00.000
Comments