我一直在寻找一个 SQL 函数来测试一个值是 alpha 还是 numeric。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 个字符,并确保数据中没有 alpha 字符毕竟替换和修剪。(如果您觉得我更换和修剪的方式有什么问题,我也愿意就这方面提出建议。正则表达式?)
我想要的最终结果是:
phone
9731535149
2018011830
2129182943
has alpha chars
wrong length
我读过一个解决方案(Oracle),它建议使用 、 和 的组合,LENGTH
但Informix 7.3 不支持TRIM
TRANSLATE
TRANSLATE
*请注意 - 如果不存在,我将编写自己的函数,所以请不要建议作为答案。我只想知道是否有任何内置方法可以做到这一点。
乔纳森·莱弗勒来救援?