Проверка записи, чтобы увидеть, содержит ли она только цифры - PullRequest
2 голосов
/ 31 мая 2019

Я проверяю коды НДС. Коды включают в себя ГБ перед ними, но я не хотел бы включать это и посмотреть, включает ли остальная часть кода НДС только цифры.

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"

1 Ответ

0 голосов
/ 31 мая 2019

Вот как бы я это сделал:

-- 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...