我需要用點替換逗號,然後我需要我的值爲數字。 所以我寫了這一點:十進制分隔符oracle
select replace('12345,6789', ',' , '.') from dual --it works fine
但後來我想轉換to_number
是價值,我得到的錯誤:
"invalid number"
我需要用點替換逗號,然後我需要我的值爲數字。 所以我寫了這一點:十進制分隔符oracle
select replace('12345,6789', ',' , '.') from dual --it works fine
但後來我想轉換to_number
是價值,我得到的錯誤:
"invalid number"
的to_number()
function使用會話的NLS_NUMERIC_CHARACTERS設置,以決定如何解釋逗號和句號。如果您知道您的字符串將始終以逗號作爲小數分隔符,那麼可以使用可選的第三個參數將其作爲調用的一部分進行覆蓋;雖然這並不意味着你必須指定格式模型:
select to_number('12345,6789', '9999999999D9999', 'NLS_NUMERIC_CHARACTERS='',.''')
from dual;
TO_NUMBER('12345,6789','9999999999D9999
---------------------------------------
12345.6789
你並不需要一個單獨的replace()
一步。
您也可以使用ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.';
更改會話的設置,但是您可能無法控制必須運行代碼的每個客戶端的設置。
小數點分隔符在您的語言環境中定義。這看起來像是,
。所以,你不必將你的字符串前做替換:
select to_number('12345.6789') from dual --should work already
或更改您的區域設置:
alter session set NLS_NUMERIC_CHARACTERS= '.,';
select to_number('123'||'.'||'456') from dual;
select to_number(replace('12345,6789', ',' , '.')) from dual
http://stackoverflow.com/search?q=NLS_NUMERIC_CHARACTERS – Mottor
的可能的複製[NLS \ _NUMERIC \ _CHARACTERS設置爲十進制](http://stackoverflow.com/questions/24571355/nls-numeric-characters-setting-for-decimal) – Mottor