Як я можу перетворити рядок на дату в T-SQL?
Мій тест - це рядок: '24.04.2012'
Як я можу перетворити рядок на дату в T-SQL?
Мій тест - це рядок: '24.04.2012'
Відповіді:
CONVERT(datetime, '24.04.2012', 104)
Повинен зробити трюк. Дивіться тут для отримання додаткової інформації: CAST і CONVERT (Transact-SQL)
CONVERT(DateTime, DateField, 104)
Якщо припустити, що база даних MS SQL Server 2012 або новішої версії, ось рішення, яке працює. Основне твердження містить вбудований спробний розбір:
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:
Хоча річ CONVERT працює, ви насправді не повинні її використовувати. Ви повинні запитати себе, чому ви розбираєте значення рядків у SQL-сервері. Якщо це одноразова робота, коли ви вручну виправляєте деякі дані, ви не отримаєте ці дані в інший раз, це нормально, але якщо будь-яка програма використовує це, вам слід щось змінити. Найкращим способом буде використання типу даних "дата". Якщо це введення користувачем, це ще гірше. Тоді спочатку слід перевірити клієнта. Якщо ви дійсно хочете передати рядкові значення там, де SQL-сервер очікує дати, ви завжди можете використовувати формат ISO ('РРРРРММДД'), і він повинен конвертувати автоматично.
Ви можете використовувати:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Довідково: CAST і CONVERT (Transact-SQL)
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
зробить те, що потрібно, результат:
2012-04-24 00:00:00.000