【发布时间】:2017-11-16 03:09:02
【问题描述】:
我必须得到信用卡号的最后四位数字,在用子字符串函数分隔后,结果会引发转换错误。下面是一个示例表
CREATE TABLE REV (MEMO varchar(100),MEMO_TYPE varchar(100))
INSERT REV VALUES ('09999D,xxxxxxxxxxxx0999,xx/xx, 30.27', 'CREDCARD')
INSERT REV VALUES ('09999D,xxxxxxxxxxxx0666,xx/xx, 50.45', 'CREDCARD')
INSERT REV VALUES ('09999D,REVVALS,ALC, 0', 'OTHER')
下面是使用的查询
Select CAST(case when MEMO_TYPE = 'CREDCARD' then
SUBSTRING(MEMO, CHARINDEX(',', MEMO)+1, LEN(MEMO)
-CHARINDEX(',', MEMO-CHARINDEX(',',REVERSE(MEMO))-6)) ELSE null END
as varchar(100))
-- as Cardnumber)
From REV
它抛出 转换 varchar 值时转换失败 '09999D,xxxxxxxxxxxx0999,xx/xx, 30.27' 转换为 int 数据类型。
我确定我错过了一些非常简单的东西......有人愿意开导吗?
【问题讨论】:
-
你有表达式
MEMO - CHARINDEX(',',REVERSE(MEMO))。没有意义。
标签: sql sql-server substring