sql >> データベース >  >> RDS >> Oracle

varcharsql開発者から先行ゼロを削除する

    OracleにはTRIMが組み込まれています 文字列の関数。 '00012345'のような文字列があると仮定します 実際のNUMBERに変換するのではなく、文字列として保持したい場合 、LTRIMを使用できます オプションの2番目のsetを使用して機能します ゼロをトリミングすることを指定するパラメーター:

    select ltrim('000012345', '0') from dual;
    
    LTRIM
    -----
    12345
    

    先頭のスペースもある場合は、両方を一度にトリミングできます:

    select ltrim(' 00012345', '0 ') from dual;
    
    LTRIM
    -----
    12345
    

    数値に変換して元に戻すこともできますが、削除したい他の書式がない限り、これは大変な作業のようです:

    select to_char(to_number('000012345')) from dual;
    

    ちなみに、最初の試行でORA-01722を取得する直接の理由は、数値の+を使用しているためです。 Oracleの文字列集中演算子の代わりに演算子|| 。文字列を数値に暗黙的に変換しているのですが、これは避けようとしているようです。単一のスペースを暗黙的に変換すると、エラーが発生します。 (おそらく、値の一部は実際には数値ではありません。数値をNUMBERに格納する必要がある理由のもう1つの例です。 田畑;その場合は、数値に変換(またはキャスト)してから元に戻すと、ORA-01722が得られます)。 LENGTHを使用している場合は、2回目の試行でも同じ結果が得られます。 LENの代わりに 。どちらもINSTRとしては機能しません 正規表現を認識しません。 REGEXP_INSTRを使用できます 代わりに、@schurikのREGEXP_REPLACEを使用したほうがよいでしょう。 そのルートをたどりたい場合はバージョン。

    あなたの質問の編集を理解できません。挿入は次のように簡略化できるようです:

    INSERT INTO temp_table (columnNeedTrim, column2, column3, column4, column5)
    SELECT LTRIM(table1.columnNeedTrim, '0 '),
        table1.column2,
        table1.column3,
        table1.column4,
        table1.column5
    FROM table1
    INNER JOIN table2 ON table2.columnNeedTrim = table1.columnNeedTrim
    WHERE NOT EXISTS (
        SELECT * FROM temp_table
        WHERE columnNeedTrim = LTRIM(t42.columnNeedTrim, '0 '));
    

    (バージョンでサブクエリを実行している理由、または別のからトリミングされた値を取得している理由がわかりません。 サブクエリ。)

    MERGEを使用することもできます :

    MERGE INTO temp_table tt
    USING (
        SELECT LTRIM(t42.columnNeedTrim, '0 ') AS columnNeedTrim,
            t42.column2,
            t42.column3,
            t42.column4,
            t42.column5
        FROM t42 
        INNER JOIN t43 ON t43.columnNeedTrim=t42.columnNeedTrim
    ) sr
    ON (sr.columnNeedTrim = tt.columnNeedTrim)
    WHEN NOT MATCHED THEN
    INSERT (tt.columnNeedTrim, tt.column2, tt.column3, tt.column4, tt.column5)
    VALUES (sr.columnNeedTrim, sr.column2, sr.column3, sr.column4, sr.column5);
    


    1. データガバナンスに人間的なアプローチをとる

    2. PHP:1つのmysql_queryステートメントで複数のSQLクエリ

    3. どのトランザクションがWaitingfortableメタデータロック状態を引き起こしているのかを見つけるにはどうすればよいですか?

    4. JDBCタイプの方言マッピングなし:2003