сопоставление шаблонов выражений sql

Я хочу проверить шаблон в sql, чтобы, если в этом выражении (или ячейке таблицы) есть что-то, кроме числового, оно должно возвращать 1. Если вся эта ячейка имеет только числовые значения, она должна возвращать 0

eq:

case when '200290' like [anything other than numbers]
then 1
else o

person user708477    schedule 07.10.2011    source источник
comment
Какую БД вы используете? SQL-сервер? Не могли бы вы использовать ISNUMERIC()?   -  person Widor    schedule 07.10.2011
comment
Я пытаюсь не использовать какие-либо функции sql. База данных - teradata, но запрос на SQL-сервере тоже хорош.   -  person user708477    schedule 07.10.2011
comment
Извините, -1 мне за то, что я не вижу теги.   -  person Widor    schedule 07.10.2011
comment
см. stackoverflow.com/questions/ 5064977/ для ответа mysql   -  person ax.    schedule 07.10.2011
comment
@Widor - Isnumeric - известная глючная функция...   -  person JNK    schedule 07.10.2011


Ответы (2)


В SQL Server вы можете использовать что-то вроде (я не пишу за вас всю функцию):

DECLARE @t varchar(100) = '231321321321'

SELECT CASE WHEN PATINDEX('%[^0-9]%', @t) > 0 THEN 1
            ELSE 0 END
person JNK    schedule 07.10.2011
comment
@user708477 user708477 Это обычная проблема и обычное решение. ISNUMERIC() не работает должным образом, поэтому нам нужно придумать обходной путь! - person JNK; 07.10.2011
comment
Начиная с Teradata 13.10, вам нужно будет реплицировать функциональность PATINDEX() как UDF. - person Rob Paller; 10.10.2011

SELECT CASE CHARACTERS(OTRANSLATE(<your_string>,'a1234567890','a')) 
WHEN 0 THEN 0 ELSE 1 END;

Ex.:

     -- BTEQ  Enter your SQL request or BTEQ command:
SELECT CASE CHARACTERS(OTRANSLATE('12345','a1234567890','a')) 
WHEN 0 THEN 0 ELSE 1 END;

* Запрос завершен. Найдена одна строка. Вернулась одна колонка. * Общее прошедшее время составило 1 секунду.

<CASE  expression>
------------------
                 0

SELECT CASE CHARACTERS(OTRANSLATE('1a23b45c','a1234567890','a')) WHEN 0 THEN 0 ELSE 1 END;

* Запрос выполнен. Найдена одна строка. Вернулась одна колонка. * Общее прошедшее время составило 1 секунду.

<CASE  expression>
------------------
                 1
person CarlosAL    schedule 28.10.2011