我必须得到信用卡号的最后四位数,在通过子串函数分离后,结果会引发转换错误。下面是一个示例表
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。
我确定我错过了一些非常简单的事情......任何人都在关心启发?
答案 0 :(得分:0)
@Gordon是对的,你有MEMO - CHARINDEX(...)
这是一个VARCHAR字段减去INT函数的结果,这会导致你看到转换失败的消息。
答案 1 :(得分:0)
尝试以下查询
Select
case when MEMO_TYPE = 'CREDCARD'
then SUBSTRING(MEMO, CHARINDEX(',', MEMO)+1, LEN(MEMO) - (CHARINDEX(',', MEMO)-CHARINDEX(',',REVERSE(MEMO))-6)) ELSE null END
From REV
抱歉,修复了以上查询的转换错误,
请使用以下查询获取4位数的卡号..
Select
case when MEMO_TYPE = 'CREDCARD'
then replace(SUBSTRING(MEMO,charindex(',',MEMO)+1,len(MEMO) - charindex(',',reverse(MEMO),CHARINDEX(',',reverse(MEMO))+1) - charindex(',',MEMO)),'x','') ELSE null END
From REV