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

10進数のNLS_NUMERIC_CHARACTERS設定

    nls_session_parametersをクエリすると、現在のセッション設定を確認できます。 :

    select value
    from nls_session_parameters
    where parameter = 'NLS_NUMERIC_CHARACTERS';
    
    VALUE                                  
    ----------------------------------------
    .,                                       
    

    これは、nls_database_parametersで確認できるデータベースのデフォルトとは異なる場合があります。 。

    このセッションでは、クエリエラー:

    select to_number('100,12') from dual;
    
    Error report -
    SQL Error: ORA-01722: invalid number
    01722. 00000 -  "invalid number"
    

    alter sessionを使用して、セッションを直接変更できます。 または、文字列に必要な設定につながるようにクライアントが構成されていることを確認します(たとえば、オペレーティングシステムやJavaロケールから継承される場合があります):

    alter session set NLS_NUMERIC_CHARACTERS = ',.';
    select to_number('100,12') from dual;
    
    TO_NUMBER('100,12')
    -------------------
                 100,12 
    

    SQL Developerでは、「ツール」->「設定」->「データベース」->「NLS」で希望の値を設定できます。

    ただし、オプションの3番目の nlsparam を使用して、クエリの一部としてそのセッション設定をオーバーライドすることもできます。 to_number()へのパラメータ;ただし、これによりオプションの2番目の fmt パラメータも必要なので、適切な形式を選択できる必要があります:

    alter session set NLS_NUMERIC_CHARACTERS = '.,';
    select to_number('100,12', '99999D99', 'NLS_NUMERIC_CHARACTERS='',.''')
    from dual;
    
    TO_NUMBER('100,12','99999D99','NLS_NUMERIC_CHARACTERS='',.''')
    --------------------------------------------------------------
                                                            100.12 
    

    デフォルトでは、結果はセッション設定で引き続き表示されるため、小数点はピリオドのままです。



    1. Docker-postgresコンテナでpsqlコマンドを実行するにはどうすればよいですか?

    2. SQLServerでIF...THENロジックを使用する方法

    3. テーブル式の基礎、パート8 – CTE、最適化の考慮事項の続き

    4. SQLServerのALTERTABLEADDCOLUMNステートメントについて