Может ли кто-нибудь проверить это для меня в sql или teradata

У меня есть строка кода в 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.


person user708477    schedule 13.10.2011    source источник


Ответы (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 содержит библиотеку функций Oracle, преобразованных в пользовательские функции Teradata, которые могут помочь решить эту проблему. Приложив немного усилий, вы могли бы написать свою собственную UDF вокруг функции isdigit() C. (isdigit)

Сейчас это может быть бесполезно, но одной из недавно анонсированных функций Teradata 14.0 является поддержка регулярных выражений.

EDIT: добавлен пример TD 14 с REGEXP_INSTR, который должен решить проблему

SELECT table.column
  FROM table
WHERE REGEXP_INSTR(table.column, '[^[digit]])') = 0;
person Rob Paller    schedule 13.10.2011