Oracle SQL - 名前の文字列を解析し、最初の初期&最後の名前に変換します
質問
誰もがこの文字列をオンにする方法を知っている:「スミス、ジョン・R」
"JSMITH"
私は)(下ですべてを小文字に必要
カンマがどこにあるか見つけて、それが整数の場所値のTRACK
そのコンマの後の最初の文字を取得し、文字列の前にそれを置く
そして、全体の姓を取得し、最初のイニシャルの後にそれを貼り付けます。
追記 - INSTR()関数は、私のバージョンと互換性がありません
任意の助けてくれてありがとう!
解決
あなた自身のINSTR関数を書き込むことによって開始 - 例えばmy_instrそれを呼び出します。それが見つかるまで、それはを、「CHAR 1とループから開始されます。
あなたはINSTRと同じように次に使用します。
他のヒント
Oracleの正規表現を使用している、これを行うための最善の方法は、このように、備えています
SELECT LOWER(regexp_replace('Smith, John R',
'(.+)(, )([A-Z])(.+)',
'\3\1', 1, 1))
FROM DUAL;
と言う、あなたは残りの文字が続く大文字、続く続く任意の文字セット、「」、のパターンを見つけるとき1)、第三の要素(最初の名前のイニシャルを)取ると追加苗字。そして、すべての小文字を行います。
あなたのサイドノート:「INSTR()関数の私のバージョンと互換性がありません」という機能が年齢の周りされていますように、私には意味がありません。正規表現は、唯一のバージョン9iのでOracleに追加されたため、バージョンを確認します。
のポイントをお寄せいただきありがとうございます。
- シチュー
INSTR()は何のバージョンと互換性がありませんか? Oracleの?あなたは、バージョン4か何かを使用していますか?
独自の関数を作成する必要はありません、と率直に言って、これは既に存在しているSQL関数でかなり簡単に行うことができ、時間の無駄と思われます。ケアは、ずさんなデータ入力を説明するために注意する必要があります。
ここでは、あなたの定められた目標を達成するための別の方法があります:
with name_list as
(select ' Parisi, Kenneth R' name from dual)
select name
-- There may be a space after the comma. This will strip an arbitrary
-- amount of whitespace from the first name, so we can easily extract
-- the first initial.
, substr(trim(substr(name, instr(name, ',') + 1)), 1, 1) AS first_init
-- a simple substring function, from the first character until the
-- last character before the comma.
, substr(trim(name), 1, instr(trim(name), ',') - 1) AS last_name
-- put together what we have done above to create the output field
, lower(substr(trim(substr(name, instr(name, ',') + 1)), 1, 1)) ||
lower(substr(trim(name), 1, instr(trim(name), ',') - 1)) AS init_plus_last
from name_list;
HTH、 ゲイブ
私はつらい時はあなたが適切なINSTR(へのアクセス権を持っている)が、その場合は、独自のバージョンを実装していないと信じています。
あなたがまっすぐにすることを持っていると仮定します:
select substr( lower( 'Smith, John R' ) , instr( 'Smith, John R', ',' ) + 2 , 1 ) || -- first_initial substr( lower( 'Smith, John R' ) , 1 , instr( 'Smith, John R', ',' ) - 1 ) -- last_name from dual;
また、すべての名前は、その形式になりますあなたの仮定に注意してください。カンマの後に半角スペース以外の何か、「パリージ・ジュニア」などのようなデータを持つ最後の名前に気をつけます。