2010-05-06 5 views
1

У меня есть устаревшая система, в которой все поля даты поддерживаются в формате YMD. Пример:Оптимальный способ преобразования на сегодняшний день

20101123 
this is date: 11/23/2010 

Я ищу наиболее оптимальный способ преобразования из числа в поле даты.

Вот что я придумал:

declare @ymd int 

set @ymd = 20101122 

select @ymd, convert(datetime, cast(@ymd as varchar(100)), 112) 

Это очень хорошее решение, но я бродил, если кто-то лучший способ делать это

+0

Оптимальный уже означает самый.: p –

ответ

4

попробовать это:

CONVERT(DATETIME, CONVERT(NVARCHAR, YYYYMMDD)) 

Например:

SELECT CONVERT(DATETIME, CONVERT(NVARCHAR, 20100401)) 

Результаты в:

2010-04-01 00:00:00.000 
+0

Это кажется более эффективным, чем мое, и это выглядит лучше. Благодаря! – IMHO

+1

Зачем использовать NVARCHAR? char (8) будет более эффективным. –

+0

интересный поворот - это не работает. Вычисленная формула поля - любые идеи? – IMHO

2

Что у вас есть довольно хороший soltuion.

Почему вы ищете лучший способ?

+0

Поскольку у меня есть много строк для преобразования - я ищу самый быстрый способ сделать это. Это необычно? – IMHO

+0

@IMHO: Преобразование даты для миллиона строк должно стоить менее одной секунды;) – Andomar

0

я использую именно то, что работает хорошо для меня

0

Поскольку он сохраняется как целое число, тогда yo u может потенциально извлекать год, месяц и день, делясь на 100, 1000.

например.

DECLARE @Date INT 
SET @Date = 20100401 

DECLARE @Year INT 
DECLARE @Month INT 
DECLARE @Day INT 

SET @Year = @Date/10000 
SET @Month = (@Date - (@Year * 10000))/100 
SET @Day = @Date - (@Year * 10000) - (@Month * 100) 

SELECT @Date, DATEADD(MONTH,((@Year-1900)*12)[email protected],@Day-1) 

Однако я не знаю, было ли это быстрее, чем сравнение строк, которое у вас уже есть. Я думаю, что ваше решение намного чище и легче читать и будет придерживаться этого.

Смежные вопросы