SQL查询包括带连字符的多种格式

时间:2016-07-18 16:48:57

标签: mysql sql-server

我需要帮助,以便从下表中列出所有无效的税号,其中县是美国。 (有效格式严格遵守' XXXXXXXXX'' XX-XXXXXXX',' XXX-XX-XXXX'(所有数值)

因此,如果列具有空值,字母数字,我应该能够返回结果。除上述格式之外的任何内容都应该在输出中。

我写了下面的内容,但它没有给我我想要的东西。

SELECT 
   AT.ACCOUNTID, 
   AT.TAXID, 
   AT.COUNTRY 
FROM 
   ACCOUNT_TABLE AT
WHERE 
   AT.TAXID NOT LIKE '__-_______%'
   AND AT.TAXID NOT LIKE '_________'
   AND AT.TAXID NOT LIKE '___-__-____'
   AND AT.TAXID IS NULL
   AND AT.COUNTRY = 'USA'

结果:

ACCOUNTID   TAXID   COUNTRY
70656   N/A           NULL
69163   FOREIGN       GBR
474 REP GERMANY       DEU
66295   12-1234567    IRL
69442   660-535408    USA
1441    CANADIAN      NULL
70135   999999999     NULL
1369    OFFSHORE      CAN
1467    123456789     JE
1473    123-45-6789   FRA
255894  N/A           GBR

4 个答案:

答案 0 :(得分:0)

MYSQL

您的查询需要使用以下正则表达式:

'^[0-9]{3}-[0-9]{2}-[0-9]+$' to match 'XXX-XX-XXXX'

'^[0-9]+$' to match 'XXXXXXXXX'

'^[0-9]{2}-[0-9]+$' to match 'XX-XXXXXXX'

所以,这是完整的查询:

SELECT 
  AT.ACCOUNTID, 
  AT.TAXID, 
  AT.COUNTRY 
FROM ACCOUNT_TABLE AT
WHERE AT.COUNTRY = 'USA'
AND (
        AT.TAXID IS NULL 
        OR   
        (
          AND AT.TAXID REGEXP '^[0-9]{2}-[0-9]+$' = 0
          AND AT.TAXID REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]+$' = 0
          AND AT.TAXID REGEXP '^[0-9]+$' = 0
        )
    );

答案 1 :(得分:0)

在SQL Server上,您可以使用replaceisnumeric对数字进行检查。请注意,某些条件应与逻辑or结合,而不是and

select at.accountid, at.taxid, at.country 
from   account_table at
where  (  not isnumeric(replace(at.taxid, '-', ''))
       or (    at.taxid not like '__-_______'
           and at.taxid not like '_________'
           and at.taxid not like '___-__-____'
          )
       or at.taxid is null)
and    at.country = 'usa'

答案 2 :(得分:0)

希望这有帮助。

SELECT 
   AT.ACCOUNTID, 
   AT.TAXID, 
   AT.COUNTRY 
FROM 
   ACCOUNT_TABLE AT
WHERE  AT.COUNTRY = 'USA' and (
   AT.TAXID NOT LIKE '__-_______%'
   OR AT.TAXID NOT LIKE '_________'
   OR AT.TAXID NOT LIKE '___-__-____'
   OR AT.TAXID IS NULL );

答案 3 :(得分:0)

以下工作!感谢所有尝试过的人。

Intent in = new Intent(this, com.process.agenda.activity.MainActivity.class);
startActivity(in);