0

複数のケースを使用できるかどうかを確認したかったのですが、ケース内でケースを必要とする何かを試みていますか?私はこれを sql teradata で実行しています 私が使用しようとしているコードは以下のとおりです

AND(
    case when CHARACTER_LENGTH(drug.n)=0 then 0 

     when CHARACTER_LENGTH(drug.n)=1 then
     (case when substring(drug.n from  1,1) in            (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end)


     when CHARACTER_LENGTH(drug.n)=2 then 
     (case when substring(drug.n from  1,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end *
     case when substring(drug.n from  2,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end ) 


     when CHARACTER_LENGTH(drug.n)=3 then 
     (case when substring(drug.n from  1,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end *
     case when substring(drug.n from  2,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end *
     case when substring(drug.n from  3,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end )=1

誰かがより良いアイデアを持っている場合は、私に知らせてください。isnumeric関数が使えません。

4

2 に答える 2

1

CASEはい、ネストされたステートメントを使用できます。Teradataでは問題ありません

于 2012-04-11T10:48:10.220 に答える
0

OK -
任意の長さの文字列に数字のみが含まれているか (または含まれていないか) を判断するには、再帰 CTE を使用できます。

お使いの RDBMS が実際に再帰 CTE をサポートしているかどうかはわかりませんが、これは潜在的な解決策です。また、パフォーマンスへの影響についてはわかりませんが、複数のCASE効果は削除されます (とにかく、実際の数値フィールドではないのはなぜですか?)。

だから...次のようなテーブルの場合:

id   ch
================
1   1234567890
2   asdg      

このステートメントは、数字のみを含むすべての行を返します(任意の長さ)。

WITH splitstring (id, chard, start, orig) as (
                  SELECT id, SUBSTRING(ch, 1, 1), 1, ch
                  FROM chartable
                  UNION ALL
                  SELECT id, SUBSTRING(orig, start + 1, 1), start + 1, orig
                  FROM splitstring
                  WHERE LENGTH(orig) > start)
SELECT * 
FROM chartest as a
WHERE NOT EXISTS (SELECT '1'
                  FROM splitstring as b
                  WHERE a.id = b.id
                  AND chard NOT BETWEEN '0' AND '9')

より大きなコンテキストがなければ、何を達成しようとしているのかを正確に知ることはやや困難です。ただし、これはニーズに合わせて調整できる必要があります。

(補足として、iSeries 用の DB2 も正規表現をサポートしていないようです...)

于 2011-10-18T17:11:08.287 に答える