Какой эффективный способ преобразования строки месяца и года в дату? - PullRequest
2 голосов
/ 25 марта 2010

У меня есть столбец с varchar значениями типа "022008", которые мне нужно преобразовать в datetime типа "02/01/2008". Это запустит миллионы записей для процесса конвертации. Что такое эффективный оператор выбора для этого?

Ответы [ 3 ]

3 голосов
/ 25 марта 2010

Как насчет чего-то вроде:

SET DATEFORMAT MDY
GO
Select StringValue, Cast(Stuff(StringValue, 3, 0, '-01-') As datetime)
From Table...

На моем локальном компьютере миллион строк, которые вернулись за 10 секунд.

0 голосов
/ 25 марта 2010

Не очень эффективно, но мой первый удар в этом:

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
0 голосов
/ 25 марта 2010

Посмотрите здесь:
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...