Я пытаюсь импортировать данные из базы данных поставщика и объединить два столбца в один для нашей базы данных.У них есть два столбца: CITATION_DATE
, который является datetime
типом данных, и CITATION_TIME
, который является char(8)
типом данных.
Я хотел бы объединить эти два столбца в один столбец issueDate
, которыйимеет тип данных datetime2(7)
.
![enter image description here](https://i.stack.imgur.com/DoDDK.png)
Я попытался использовать логику Аарона, найденную здесь , но мне не удалось получитьзапрос для выполнения.Я подозреваю, что мне нужно больше символов в CITATION_TIME
для формирования правильной отметки времени, но я не уверен.
Есть ли способ объединить эти два поля в один столбец - после datetime2
format?
Я пытался очистить недопустимые значения, такие как пустые строки или нечисловые символы:
;WITH issueDate AS
(
SELECT
TRY_CAST(vt.CITATION_DATE AS DATE) AS CITATION_DATE ,
CASE WHEN RTRIM ( LTRIM ( vt.CITATION_TIME )) = '' THEN '0000'
WHEN RTRIM ( LTRIM ( vt.CITATION_TIME )) = '000' THEN '0000'
WHEN TRY_CAST(vt.CITATION_TIME AS INT) IS NULL THEN '0000'
ELSE vt.CITATION_TIME
END AS CITATION_TIME
FROM
Oklahoma_PVD_WildlifeLaw.dbo.VIOLATOR_TICKETS AS vt
--ORDER BY CITATION_TIME;
)
SELECT
CONVERT(DATETIME, CONVERT(CHAR(8), id.CITATION_DATE, 112) + ' ' +
CONVERT(CHAR(8), id.CITATION_TIME, 108))
FROM
issueDate AS id;
Но я получаю следующую ошибку:
Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона
Похоже, мне не хватает символов для части TIME - какэто возвращает значения в формате DATETIME
, но я теряю все свои часы и минуты таким образом:
;WITH issueDate AS
(
SELECT
TRY_CAST(vt.CITATION_DATE AS DATE) AS CITATION_DATE,
CASE
WHEN RTRIM(LTRIM(vt.CITATION_TIME)) = '' THEN '00:00:00.0000000'
WHEN RTRIM(LTRIM(vt.CITATION_TIME)) = '000' THEN '00:00:00.0000000'
WHEN TRY_CAST(vt.CITATION_TIME AS INT) IS NULL THEN '00:00:00.0000000'
--ELSE vt.CITATION_TIME
END AS CITATION_TIME
FROM
Oklahoma_PVD_WildlifeLaw.dbo.VIOLATOR_TICKETS AS vt
--ORDER BY CITATION_TIME;
)
SELECT
CONVERT(DATETIME, CONVERT(CHAR(8), id.CITATION_DATE, 112) + ' ' +
CONVERT(CHAR(8), id.CITATION_TIME, 108)) AS [DateTime]
FROM
issueDate AS id
WHERE
CONVERT(DATETIME, CONVERT(CHAR(8), id.CITATION_DATE, 112) + ' ' +
CONVERT(CHAR(8), id.CITATION_TIME, 108)) IS NOT NULL;