Я искал функцию SQL, которая проверяет значение на наличие букв или чисел. Похоже, что для Informix 7.3 таких функций не существует, но я мог что-то пропустить или искал что-то не то.
Например, я пытаюсь проверить поле телефонного номера, чтобы в нем были только номера и соответственно с ним работать:
Учитывая эту таблицу с типом поля телефона, являющимся char(12)
:
id name phone
5164 Cheese 973-153-5149
8843 Queso (201)8011830
8356 Formaggio 2129182943
8938 Ost ext.21438
3852 Ser 973-15-1549
Я хочу сделать что-то вроде этого:
SELECT CASE WHEN (ISALPHA((TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))))
THEN 'has alpha chars'
WHEN (LENGTH((TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))) NOT IN (10,11))
THEN 'wrong length'
WHEN (phone IN ('',' ',NULL)))
THEN 'phone is blank'
ELSE (TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))
END phone
FROM given_table;
По сути, я пытаюсь удалить любые символы -
, (
, )
,
, .
из номера телефона, обрезать полученный результат, проверить его длину на 10 или 11 длина символов, и убедитесь, что в данных нет альфа-символов после всех замен и обрезки. (Если вы чувствуете, что что-то не так с тем, как я собираюсь заменить и обрезать, я открыт для предложений по этому аспекту. Regex?)
Конечный результат, который я хотел бы получить:
phone
9731535149
2018011830
2129182943
has alpha chars
wrong length
Я прочитал одно решение (Oracle), в котором предлагается использовать комбинацию LENGTH
, TRIM
и TRANSLATE
, но TRANSLATE
не поддерживается для Informix 7.3
* Обратите внимание - я напишу свою собственную функцию, если ее не существует, поэтому, пожалуйста, не предлагайте это в качестве ответа. Я просто хочу знать, есть ли какие-либо встроенные способы сделать это.
Джонатан Леффлер на помощь?