Những điều sau sẽ hoạt động:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
Nó sẽ tạo đối số thứ hai chính xác 999.999999
với translate
hiệu quả vì vậy bạn không cần phải biết trước có bao nhiêu chữ số. Nó sẽ hoạt động với tất cả định dạng số Oracle được hỗ trợ (có thể lên đến 62 chữ số có nghĩa trong 10.2.0.3).
Thật thú vị, nếu bạn có một chuỗi thực sự lớn thì to_number(:x)
đơn giản sẽ hoạt động trong khi phương pháp này sẽ thất bại.
Chỉnh sửa:hỗ trợ số âm nhờ sOliver.