Не удалось преобразовать дату и / или время из строки символов - PullRequest
0 голосов
/ 27 марта 2019

вывод представляет собой комбинацию из двух столбцов и необходимо преобразовать в дату.Источник данных числовой.Код работает хорошо для первых 100 000, а ошибка возникает после 409 560.Ошибка как «Ошибка при преобразовании даты и / или времени из символьной строки».

SELECT

CASE WHEN LEN(OR6) = 6 THEN 
        CAST(CONCAT(SUBSTRING(CONVERT(VARCHAR(10),ORT),1,4),SUBSTRING(CONVERT(varchar(10),OR6),3,2),SUBSTRING(CONVERT(varchar(10),OR6),1,2))AS DATE) 
    WHEN LEN(OR6) = 5 THEN 
        CAST(CONCAT(SUBSTRING(CONVERT(VARCHAR(10),ORT),1,4),SUBSTRING(CONVERT(varchar(10),OR6),2,2),'0',SUBSTRING(CONVERT(varchar(10),OR6),1,1))AS DATE) 
    ELSE NULL 
END AS ORI_MAT_DT ,DATE1 = OR6 ,DATE2 = ORT
FROM DATETABLE

Это исходная база данных:

ROW       OR6      ORT
409,559  10611  2011152
409,560  50618  2018156
409,561  10615  2015152
409,562  50618  2018156

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:

ORI_MAT_DT  DATE1   DATE2 
2001-08-15  150801  2001227

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете использовать небольшую математику, чтобы получить нужные значения из числовых значений в OR6 и ORT, а затем использовать DateFromParts для построения даты:

Исходные данные:

DECLARE @Date1 numeric(10,2) = 150801,
        @Date2 numeric(10,2) = 2001227

Запрос:

SELECT DATEFROMPARTS(
        @Date2 / 1000, -- Get the year
       (@Date1 % 10000 - @Date1 % 100) / 100, -- Get the month
        @Date1 / 10000 -- Get the day
       ) As Date

Результат:

Date
2001-08-15

Функции DateFromParts принимают значения int, представляющие год, месяц и день, и создают объект Date. Поскольку для этого требуется int, SQL Server будет неявно преобразовывать числовые значения, полученные из вычислений, в int путем усечения десятичной части.

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