Оптимальный способ конвертировать в дату - PullRequest
1 голос
/ 06 мая 2010

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

20101123
this is date: 11/23/2010

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

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

declare @ymd int

set @ymd = 20101122

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

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

Ответы [ 4 ]

4 голосов
/ 06 мая 2010

попробуйте это:

CONVERT(DATETIME, CONVERT(NVARCHAR, YYYYMMDD))

Например:

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

Результат:

2010-04-01 00:00:00.000
2 голосов
/ 06 мая 2010

То, что у вас есть, довольно хорошее решение.

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

0 голосов
/ 06 мая 2010

Поскольку оно хранится как целое число, вы можете извлечь год, месяц и день, разделив 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)+@Month-1,@Day-1)

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

0 голосов
/ 06 мая 2010

Я использую именно это, у меня все работает нормально

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