#sql #sql-server #tsql #sql-server-2008
#sql #sql-server #tsql #sql-server-2008
Вопрос:
У меня есть столбец, в котором значения даты хранятся в varchar (формат ddmmyy) следующим образом
231280
121280
131185
...
Как преобразовать эти значения в тип данных datetime?
Ответ №1:
Set DateFormat DMY
GO
Select Cast(Stuff(Stuff(SomeValue, 3, 0, '-'), 6, 0, '-') As datetime)
From MyData
Комментарии:
1. Используя это решение, должен ли я всегда устанавливать dateformat в DMY перед выполнением?
2. @jara — Да, потому что это гарантирует, что Cast правильно интерпретирует положение месяца и дня независимо от формата даты по умолчанию на сервере.
3. @jara — Без DateFormat, например, на компьютере / сервере в США, было бы желательно интерпретировать дату как MM-DD-YY вместо DD-MM-YY.
Ответ №2:
Используйте подстроку, чтобы получить год, месяц и день, если год больше 11, добавьте к нему 19, если нет, добавьте 20, чтобы получить год в формате 2009, но это ваш запрос, просто вместо строки добавьте имя вашего столбца
select CAST(
CASE WHEN CAST(SUBSTRING('231280', 5, 2) AS INT) >11
THEN '19' SUBSTRING('231280', 5, 2)
else '20' SUBSTRING('231280', 5, 2)
END
'-' SUBSTRING('231280', 3, 2) '-' SUBSTRING('231280', 1, 2) as datetime)
Ответ №3:
Вам пришлось бы использовать некоторую обработку подстрок, чтобы преобразовать вашу строку в известный формат даты. Вот пример преобразования строки в формат 3, «британский / французский»:
declare @YourTable table (YourColumn varchar(50))
insert @YourTable
select '231280'
union all select '121280'
union all select '131185'
select convert(datetime, substring(YourColumn,1,2) '/'
substring(YourColumn,3,2) '/' substring(YourColumn,5,2), 3)
from @YourTable
Ответ №4:
Поскольку этот формат является нестандартным, используйте
DECLARE @field char(6)
SET @field = '231280'
select convert(datetime, right(@field, 2) substring(@field, 3, 2) left(@field, 2) , 12)
Комментарии:
1. Код построил строки в неправильном порядке, что привело к ошибке, но основная идея была правильной. Я исправил код и протестировал, чтобы убедиться, что он работает.
2. @JohnFx Я отредактировал это через 5 секунд после публикации. Я назвал свою правку «Doh». Затем, 9 минут спустя, вы сделали то же самое : (