Informix 7.3 中是否有测试字母或数字数据的内置函数?

Che*_*eso 2 sql informix function built-in isnumeric

我一直在寻找一个 SQL 函数来测试一个值是 alpha 还是数字。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
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

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;
Run Code Online (Sandbox Code Playgroud)

基本上,我试图从电话号码中删除任何-, (, ), ,.字符,修剪该结果,测试它的长度是否为 10 或 11 个字符,并确保数据中没有 alpha 字符。替换和修剪。(如果您觉得我将如何替换和修剪有任何问题,我也愿意在这方面提出建议。正则表达式?)

我想要的最终结果是:

phone
9731535149
2018011830
2129182943
has alpha chars
wrong length
Run Code Online (Sandbox Code Playgroud)

我读过一个解决方案(Oracle)的该建议使用的组合LENGTHTRIMTRANSLATE,但TRANSLATE不支持为Informix 7.3


*请注意 - 如果不存在,我将编写自己的函数,因此请不要建议将其作为答案。我只想知道是否有任何内置方法可以做到这一点。
乔纳森·莱夫勒(Jonathan Leffler)来救援?