Sql 验证记录以查看其是否仅包含数字

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

我正在验证增值税代码。代码前面包括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"           "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服务器