0

文字列内の数値を抽出してフィルターとして使用したいと考えています。

私のデータは次のようになります。

 AAAA_01_01_AAA
 BBBB_01_02_BBB
 CCCC_01_03_CCC
 DDDD_01_04_DDD

2 番目の数値セット [01,02,03,04] を抽出し、以下のようにフィルターとして使用したいと思います。

where substr(colname,9,2) > 4

エラーが表示される

 2621: Bad character in format or data of TVM.TVMName

以下のように整数に変換しようとしましたが、うまくいきません。

 where cast(substr(colname,9,2) as int) > 4

ありがとうございました。

4

2 に答える 2

3

文字変数を検査しているので、文字処理にとどまる方がはるかに安全だと思います。データ行の形式が異なる場合、部分文字列を数値に変換する際にエラーが発生する可能性があります。

つまり、これを試してください:

where substring(colname from 9 for 2) between '05' and '99'

元の質問は「4 より大きい」ため、これは「05」で始まることに注意してください。

于 2013-05-16T21:09:32.060 に答える
2

関数の使用を検討しましたかPOSITION():

SELECT TVMName
  FROM DBC.TVM
 WHERE POSITION('04' IN TVMName) = 9;

編集

あなたの質問を読み違えてください。次の SQL は、SUBSTRING の出力を SMALLINT に変換します。

SELECT 'DDDD_01_04_DDD'
     , CAST(SUBSTRING('DDDD_01_04_DDD' FROM 9 FOR 2) AS SMALLINT) AS Token_
 WHERE Token_ > 4;

Token_ が実際には 4 であるため、このクエリは行を返しません。

SUBSTRING()Teradata 拡張機能を試してみましたSUBSTR()か? すべてのケースの 99% で同じように機能するはずです。

于 2013-05-16T03:08:28.177 に答える