oracle Compare two VAT numbers

wj8zmpe1  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(184)

我试着只列出像DDDDDDDDDLLDDDD这样的增值税号码,否则我就必须列出NULL https://i.stack.imgur.com/4PYR8.png

case when o.VAT_NUMBER= TO_char(o.VAT_NUMBER, '999999999LL9999') then o.VAT_NUMBER
    else 'NULL' end as VAT_NUMBER,

我很确定我已经接近了,但还缺少一些东西:

zf2sa74q

zf2sa74q1#

我不熟悉您使用的增值税编号。如果我没有记错的话,您要查找的值似乎包含9位数字,后面是2个L(?),后面是4位数字。Oracle文档中说明“L”代表 * 当地货币符号 *(在您的情况下是RP),因此-对于示例数据

SQL> with test (vat_number) as
  2    (select '786633632R97685' from dual union all
  3     select '121015206R77405' from dual union all
  4     select '567299566RP9332' from dual
  5    )

你可以试试

6  select vat_number,
  7         case when regexp_like(vat_number, '\d+{9}RP\d+{4}') then vat_number
  8              else 'null'
  9         end as result
 10  from test;

VAT_NUMBER      RESULT
--------------- ---------------
786633632R97685 null
121015206R77405 null
567299566RP9332 567299566RP9332

SQL>
qnakjoqk

qnakjoqk2#

您可以使用正则表达式^\d{9}[A-Z]{2}\d{4}$来比对字串的开头,然后是任何9个数字,再然后是任何2个大写字母,再然后是任何4个数字,最后是字串的结尾:

CASE
WHEN REGEXP_LIKE( o.VAT_NUMBER, '^\d{9}[A-Z]{2}\d{4}$')
THEN o.VAT_NUMBER
ELSE NULL
END as VAT_NUMBER

如果您需要任何大小写,请使用[a-zA-Z][[:alpha:]],或使匹配不区分大小写。

  • 注意:如果在匹配中不包括字符串的开头和结尾,则可以匹配字符串中间的子字符串,而不是整个字符串。*

相关问题