2

値がアルファであるか数値であるかをテストする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文字の長さであるかどうかをテストし、すべての後にデータにアルファ文字がないことを確認しようとしてい-ます。交換してトリミングします。(私が交換とトリミングを行う方法に何か問題があると感じた場合は、その側面についても提案を受け付けています。正規表現?)().

私が望む最終結果は次のようになります。

phone
9731535149
2018011830
2129182943
has alpha chars
wrong length

、、の組み合わせを使用することを提案しているが、Informix 7.3ではサポートされていない1つのソリューション(Oracle )を読みましLENGTHTRIMTRANSLATETRANSLATE


*注意-存在しない場合は独自の関数を作成しますので、回答として提案しないでください。これを行うための組み込みの方法があるかどうかを知りたいだけです。
ジョナサン・レフラーが救助に?

4

2 に答える 2

5

これは、アルファをテストするために見つけた方法です。回避策ですが、今のところ信頼できると思います。

SELECT phone FROM given_table WHERE UPPER(phone)<>LOWER(phone);

参照: http://www.geekinterview.com/question_details/34549 (ページの半分より少し下にあるユーザー「amarnathtnl」からの回答を参照)

于 2011-03-30T15:00:58.920 に答える
2

これは確実に機能します:

CREATE FUNCTION to_int(alpha VARCHAR(16)) RETURNING INT;
  DEFINE n INT;
  ON EXCEPTION IN (-1213) RETURN NULL; END EXCEPTION;
  LET n = alpha;
  RETURN n;
END FUNCTION;

数値または NULL を返します。

于 2014-03-27T13:34:37.593 に答える