【问题标题】:Can somebody verify this for me in sql or teradata有人可以在 sql 或 teradata 中为我验证吗
【发布时间】:2011-10-13 15:09:30
【问题描述】:

我在 Oracle 中有一行代码,我必须将其转换为 Teradata。 Oracle 查询是

 /* add to avoid invalid number due to junk in column */

AND regexp_instr(table.column, ''[^[:digit:]]'', 1, 1)  = 0 

我用 Teradata 写的代码

AND (CASE WHEN (POSITION('' '' IN TRIM(table.column)) > 0) OR (UPPER(TRIM(table.column))              
        (CASESPECIFIC) <> LOWER(TRIM(table.column)) (CASESPECIFIC)) 
          THEN 1 ELSE 0 end ) = 0

该列定义为VARCHAR(20),但我只想选择数据全部为数字的行。我无法验证 Teradata 查询,因为它是一个运行时间很长的查询,而且我无权创建表,或者我无法验证我拥有的数据库上的输出。我有些尝试过,它看起来很有效,但我曾经想验证语法和我对 REGEXP_INSTR 的理解。

【问题讨论】:

    标签: sql regex oracle10g teradata plsqldeveloper


    【解决方案1】:

    如果我阅读正确并且根据我的测试,这将打破你的逻辑(都返回 1):

    SELECT (CASE WHEN (POSITION('' '' IN TRIM('1234')) > 0) OR (UPPER(TRIM('1234'))              
            (CASESPECIFIC) <> LOWER(TRIM('1234')) (CASESPECIFIC)) 
              THEN 1 ELSE 0 END )
    
    SELECT (CASE WHEN (POSITION('' '' IN TRIM('abcd ef1')) > 0) OR (UPPER(TRIM('abcd ef1'))              
            (CASESPECIFIC) <> LOWER(TRIM('abcd ef1')) (CASESPECIFIC)) 
              THEN 1 ELSE 0 END )
    

    Teradata Developer's Exchange 包含已转换为 Teradata UDF 的 Oracle 函数库,可帮助您解决此问题。稍加努力,您就可以围绕isdigit() C 函数编写自己的UDF。 (isdigit)

    现在可能没有帮助,但最近宣布的 Teradata 14.0 功能之一是支持正则表达式。

    编辑:添加了带有 REGEXP_INSTR 的 TD 14 示例,应该可以解决问题

    SELECT table.column
      FROM table
    WHERE REGEXP_INSTR(table.column, '[^[digit]])') = 0;
    

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2020-05-14
      • 1970-01-01
      • 2015-12-27
      • 2011-10-17
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多