Итак, я пытаюсь создать столбец с указанием срока годности на карте. Дата истечения срока действия закодирована в штрих-коде в виде 5-значной строки в формате ddmmy. Проблема в том, что карта возвращает только последнюю цифру года, а мне нужна вся дата. Например, если часть штрих-кода, соответствующая дате, равна 19052, то датой истечения срока может быть 19 мая 1992 г., 19 мая 2002 г. или 19 мая 2012 г.
Моя задача заключалась в том, чтобы определить известный год даты запуска теста на карточке. То, что я пытаюсь сделать, это создать оператор If, который говорит, ЕСЛИ последняя цифра даты истечения срока действия = последняя цифра партии. StartTime year THEN год истечения срока действия = batch.StartTime year. ИЛИ ЕСЛИ последняя цифра года истечения срока действия = 0 и последняя цифра партии. Начальный год = 9 ТО год выпуска = первые 3 цифры партии. Начальный год + последняя цифра даты окончания срока действия + 10 (для следующего десятилетия). ELSE год истечения срока действия = первые 3 цифры партии. Год начала года + последняя цифра срока годности.
Проблема в том, что мое заявление ЕСЛИ не сработает. Я продолжаю получать неправильную синтаксическую ошибку IF. Также, если я пытаюсь увидеть результаты только для каждого условия в отдельности, это говорит мне, что он не может преобразовать день и месяц (с символом «/» между) в INT, даже если я объявляю их как символы. Вот код:
SELECT
(CAST(SUBSTRING(tbl_CardIdentification.CardId, 11,2) + '/' + --this is the day
SUBSTRING(tbl_CardIdentification.CardId, 13,2) + '/' AS CHAR(6)) + -- this is the month
(IF
(SUBSTRING(tbl_CardIdentification.CardId, 15,1) =
(SUBSTRING(CAST(DATEPART(YY, tbl__Batch.Start) AS CHAR(4)), 4,1)))
SELECT SUBSTRING(CAST(DATEPART(YY, tbl_Batch.Start) AS CHAR(4)),1,4)
ELSE IF
(CAST(SUBSTRING(tbl_CardIdentification.CardId, 15,1) AS INT)) = 0 AND
(CAST(SUBSTRING(CAST(DATEPART(YY, tbl_Batch.Start) AS CHAR(4)), 4,1) AS INT)) = 9
SELECT (CAST((SUBSTRING(CAST(DATEPART(YY, tbl__Batch.Start) AS CHAR(4)), 1,3) +
SUBSTRING(tbl_CardIdentification.CardId, 15,1)) AS INT) + 10)
ELSE SELECT
(SUBSTRING(CAST(DATEPART(YY, tbl__Batch.Start) AS CHAR(4)), 1,3) +
SUBSTRING(tbl_CardIdentification.CardId, 15,1))
AS Card_Expiration
FROM
tbl_LoadProcess
JOIN tbl_Batch ON
tbl_Batch.LoadProcessSid = tbl_LoadProcess.LoadProcessSid
JOIN tbl_CardIdentification ON
tbl_CardIdentification.LoadProcessSid = tbl_LoadProcess.LoadProcessSid