У меня есть столбец с varchar значениями типа "022008", которые мне нужно преобразовать в datetime типа "02/01/2008". Это запустит миллионы записей для процесса конвертации. Что такое эффективный оператор выбора для этого?
Как насчет чего-то вроде:
SET DATEFORMAT MDY GO Select StringValue, Cast(Stuff(StringValue, 3, 0, '-01-') As datetime) From Table...
На моем локальном компьютере миллион строк, которые вернулись за 10 секунд.
Не очень эффективно, но мой первый удар в этом:
declare @s as char(6) set @s = '031977' select dateadd(month, cast(substring(@s, 1, 2) as int) - 1, dateadd(year, substring(@s, 3, 4) - 1900, 0))
Выход:
1977-03-01 00:00:00.000
Посмотрите здесь: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
Функция STR_TO_DATE делает именно то, что звучит так, как она это делает: она берет строку и превращает ее в стандартный объект даты. Чтобы перевести его в формат MM / DD / YYY, вы используете DATE_FORMAT. Это самый простой способ сделать это, и, вероятно, самый эффективный.
Например, вы можете преобразовать его так:
SELECT DATE_FORMAT(STR_TO_DATE('022008', '%m%Y'), '%m/%d/%Y'); -> 02/00/2008
Вы должны будете сделать лишнюю чепуху, чтобы в этот день прочитать «01», так что, возможно, вы сможете убрать это, как только вернете результаты; в противном случае запрос становится более сложным.
Надеюсь, это поможет. -tjw