【发布时间】:2011-07-18 17:01:35
【问题描述】:
所以我正在尝试在一种卡上创建一个到期日期列。到期日期在条形码中编码为 ddmmy 格式的 5 数字字符串。问题是卡只返回年份的最后一位,我需要整个日期。例如,如果条形码中与日期相对应的部分是 19052,那么到期日期可能是 1992 年 5 月 19 日、2002 年 5 月 19 日或 2012 年 5 月 19 日。
我的解决方法是提取在卡上运行测试日期的已知年份。我要做的是创建一个 If 语句,说明 IF 到期日期的最后一位数字 = batch.StartTime 年份的最后一位数字 THEN 到期年份 = batch.StartTime 年份。 ELSE IF 到期年份的最后一位数字 = 0 和批次的最后一位数字。StartTime 年份 = 9 THEN 到期年份 = 批次的前 3 位数字。StartTime 年份 + 到期日期的最后一位数字 + 10(下一个十年)。 ELSE 到期年份 = 批次的前 3 位数字。StartTime 年份 + 到期日期的最后一位数字。
问题是我的 IF 语句不起作用。我不断收到 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
【问题讨论】:
标签: sql-server date join if-statement