Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Không thể SUM (TO_NUMBER (trường varchar2)):ORA 01722 [ORACLE]

Nếu bạn gặp lỗi đó từ một chuỗi như 13.5 thì NLS_NUMERIC_CHARACTERS của phiên của bạn dường như được đặt để sử dụng dấu phẩy làm dấu phân cách thập phân:

alter session set nls_numeric_characters=',.';

with your_table (bikou) as (
  select '10' from dual
  union all select '12' from dual
  union all select '13.5' from dual
  union all select null from dual
)
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', '')))
from your_table;

SQL Error: ORA-01722: invalid number

Bạn có thể đặt phiên một cách rõ ràng để sử dụng dấu chấm làm dấu phân tách thập phân hoặc cung cấp mặt nạ định dạng sử dụng dấu chấm:

select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999'))
from your_table;

SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
                                   35,5

Hoặc sử dụng điểm đánh dấu phân tách thập phân trong mô hình và ghi đè cài đặt NLS của phiên:

select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''),
  '99999999D99999', 'nls_numeric_characters=''.,'''))
from your_table;

SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
                                   35,5

Mặt nạ rõ ràng phải phù hợp với tất cả các giá trị mà bạn mong đợi từ regex của mình; những gì tôi đã sử dụng có thể không hoàn toàn phù hợp với dữ liệu của bạn.

Loại vấn đề này là lý do tại sao bạn không nên lưu trữ số hoặc ngày tháng dưới dạng chuỗi. Sử dụng loại dữ liệu chính xác cho các cột của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quy trình cập nhật bảng đã được điền

  2. Kiểu dữ liệu SQL national character (NCHAR) thực sự dùng để làm gì?

  3. Hàm Lag của Oracle với tham số động

  4. Cách đổi tên cột bảng trong Oracle 10g

  5. Ảnh hưởng của việc thay đổi cài đặt NLS_LANG trong sổ đăng ký cho Máy khách Oracle