Может кто-нибудь проверить это для меня в sql или teradata - PullRequest
1 голос
/ 13 октября 2011

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

1 Ответ

0 голосов
/ 14 октября 2011

Если я читаю правильно и на основании своих тестов это нарушит вашу логику (оба возвращают 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...