将BIGINT加入VARCHAR,其中VARCHAR仅包含少量非数字字符

时间:2014-02-02 19:54:32

标签: sql tsql netezza

我正在尝试在常见的acct_nbr字段中连接Netezza数据库中的两个事实表。在表a中,它是BIGINT,在表b中,它被编码为VARCHAR。 (我无法控制表格设计,我怀疑它设置为VARCHAR,因为它是由网页输入填充的,并且需要能够容忍拼写错误。)我想忽略连接的字母字符 - 我我愿意排除表b中包含非数字字符的所有字段。 (该字段还包含 - ,?,!等)

我尝试了以下内容:

  1. 基本联接。抛出'9999R99999'的坏int8表示,我假设它基于它遇到的第一个不可转换的VARCHAR条目。
  2. 在两个字段上使用强制转换/转换(对于b.acct_nbr为BIGINT,对于a.acct_nbr为VARCHAR),我可能已经错误地实现了。各种错误,没有结果。
  3. 使用“select ... from table_a a join table_b b on(a.acct_nbr = b.acct_nbr,b.acct_nbr不像'%[^ 0-9]%')”。我似乎无法完成这项工作,而且我没有找到'%[]%'语法如何工作的良好解释。我知道%做了什么,但我对如何使用克拉和括号的理解很差。
  4. 我确信这是一个简单的问题,但我正在撞墙。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以通过几种不同的方式完成加入。

    select ... 
    from table_a a join 
    table_b b on (a.acct_nbr=b.acct_nbr 
and translate(b.acct_nbr,'1234567890','') in ('','.','-','-.')

或者,如果您安装了sql functions工具包,则可以执行此操作。

    select ... 
        from table_a a join 
        table_b b on 
(a.acct_nbr=sql_functions..regexp_extract(b.acct_nbr,'^[0-9]{1,18}')