テキストフィールド(文字列)に郵便番号を保存していて、selectステートメントの値の最後の3桁のみを選択したいと思います。これは可能ですか?SQLがデータベース間で交換可能になるようにこれを行う標準的な方法はありますか?Oracleの本番環境で使用しますが、Interbaseでテストします(はい、はい、2つの完全に異なるDBですが、それが私が行っていることです)
あなたが提供できるどんな助けにも感謝します
郵便番号がすべて同じ長さであると仮定すると、を使用できますsubstr
。
それらが同じ長さでない場合は、strlen
関数で同様のことを行う必要があります。
Interbaseには組み込みのサブストリング関数はありませんが、次のように機能するUDF
(ユーザー定義関数)が呼び出さSUBSTR
れlib_udf.dll
ます。
select substr(clients.lastname, 1, 10)
from clients
次のようにUDFを宣言します。
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(80),
SMALLINT,
SMALLINT
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';
Oracleには、次のように使用する組み込みのsubstr関数があります。
select substr(clients.lastname, 1, 10)
from clients
--jeroen
これは、郵便番号の保存方法によって異なります。5桁のみを使用している場合、これはOracleで機能するはずであり、Interbaseでも機能する可能性があります。
select * from table where substr(zip,3,3) = '014'
Zip + 4を保存していて、最後の3桁が必要で、一部が5桁で、一部が9桁の場合は、次の手順を実行する必要があります。
select * from table where substr(zip,length(zip) -2,3) = '014'
両方のデータベースでより適切に機能する可能性のある1つのオプションは次のとおりです。
select * from table where zip like '%014'