Giả sử dữ liệu sau:SQL IsNumeric trả về true nhưng báo cáo SQL 'chuyển đổi Không'
Column1 (data type: varchar(50))
--------
11.6
-1
1,000
10"
Non-Numeric String
Tôi có một truy vấn, mà là kéo dữ liệu từ cột này và muốn để xác định xem giá trị là một số, sau đó trả lại như vậy trong truy vấn của tôi. Vì vậy, tôi làm như sau
SELECT CASE WHEN IsNumeric(Replace(Column1,'"','')) = 1 Then Replace(Column1,'"','') Else 0 End As NumericValue
SQL được báo cáo lại: chuyển đổi thất bại khi chuyển đổi các giá trị 0,6' varchar '11 để kiểu dữ liệu int.
Tại sao? Tôi cũng đã cố gắng ép buộc điều này:
SELECT CASE WHEN IsNumeric(Replace(Column1,'"','')) = 1 Then cast(Replace(Column1,'"','') as float) Else 0 End As NumericValue
Và tôi nhận được: Lỗi chuyển đổi loại dữ liệu varchar thành nổi.
'IsNumeric()' sẽ chấp nhận đôi/phao/đĩa đơn vv. Ngoài ra, nó không kiểm tra tràn ('99999999999999999999999999999' là số, sẽ không chuyển đổi thành hầu hết các loại số). Phương pháp hay nhất cho loại tình huống là bạn _không lưu trữ dữ liệu số trong các trường chuỗi trong địa điểm đầu tiên_. –