Sql 验证记录以查看其是否仅包含数字
我正在验证增值税代码。代码前面包括GB,但我不想包括GB,看看增值税代码的其余部分是否只包括数字Sql 验证记录以查看其是否仅包含数字,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在验证增值税代码。代码前面包括GB,但我不想包括GB,看看增值税代码的其余部分是否只包括数字 select KUNNR,VAT_CODE,REPLACE(VAT_CODE,'GB',''), CASE WHEN REPLACE(VAT_CODE,'GB','') LIKE '%[^0-9]%' THEN 'Yes' ELSE 'No' END as VAT_MATCH FROM CUSTOMER_TBL; "customer" "VAT" "REP
select KUNNR,VAT_CODE,REPLACE(VAT_CODE,'GB',''),
CASE WHEN REPLACE(VAT_CODE,'GB','') LIKE '%[^0-9]%' THEN 'Yes' ELSE 'No' END as VAT_MATCH
FROM CUSTOMER_TBL;
"customer" "VAT" "REPLACE(VAT,'GB','')" "VAT_MATCH"
"0063591544" "GB111111111" "111111111" "No"
我会这样做:
-- Sample Data
DECLARE @CUSTOMER_TBL TABLE (VAT_CODE VARCHAR(36));
INSERT @CUSTOMER_TBL VALUES ('GB123111GB'),('GB9999111'),('GBB9999111'),('GGB7777222'),
('553399444'),('GB22223366'),('GB22223366X')
-- solution
SELECT t.VAT_CODE, VAT_MATCH = IIF(f.H = 'GB' AND PATINDEX('%[^0-9]%',f.B) = 0,'Yes','No')
FROM @CUSTOMER_TBL AS t
CROSS APPLY (VALUES (SUBSTRING(t.VAT_CODE,1,2),SUBSTRING(t.VAT_CODE,3,8000))) AS f(H,B);
/* For pre-2012 systems:
VAT_MATCH = CASE WHEN f.H = 'GB' AND PATINDEX('%[^0-9]%',f.B) = 0 THEN 'Yes' ELSE 'No' END */;
结果
VAT_CODE VAT_MATCH
------------------------------------ ---------
GB123111GB No
GB9999111 Yes
GBB9999111 No
GGB7777222 No
553399444 No
GB22223366 Yes
GB22223366X No
DBMS是一个sql服务器