簡體   English   中英

如何將包含十進制數字的varchar2列轉換為數字

[英]How to convert varchar2 column containing decimal numbers to number

我有一列名為varchar2類型的折扣的列。 它包含十進制數字和整數。 我想將其轉換為數字類型。 所以我用這個查詢

update table_name set newdiscount=to_number(discount)

我收到“無效號碼”錯誤。 在這里,新的折扣是類型編號。

我檢查了是否有逗號,但是沒有。 當然,有很多行包含小數點,這些行顯示在查詢測試的結果中以檢查任何非數字值

SELECT discount FROM table_name  WHERE REGEXP_LIKE(discount, '[^[:digit:]]');

如何將折扣值復制到數字類型的newdiscount列中?

Oracle會話中的NLS_NUMERIC_CHARACTERS參數可能與小數點不同。

您可以通過以下方式進行測試:

select 
  substr(VALUE ,1,1) as decimal_separator,
  substr(VALUE ,2,1) as group_separator
from 
  nls_session_parameters 
where 
  parameter = 'NLS_NUMERIC_CHARACTERS'

您可以在更新表之前更改會話以激活適當的分隔符:

alter session set  NLS_NUMERIC_CHARACTERS = '.,' 

或每次將小數點替換為當前的小數點分隔符:

update table_name 
set newdiscount = ( select to_number( replace(discount, '.', substr(value,1,1)) )
                    from nls_session_parameters 
                    where parameter = 'NLS_NUMERIC_CHARACTERS'                  
                  )

此SQLFiddle中可以找到一些概念證明。

您可以嘗試僅更新那些驗證碼,例如數字,

update table_name
set new_discount = CASE WHEN regexp_like(discount, '^[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?$') THEN to_number(discount) ELSE -99999 END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM