Chuyển đổi một chuỗi thành int bằng truy vấn sql


168

Làm cách nào để chuyển đổi một chuỗi thành số nguyên bằng truy vấn SQL trên SQL Server 2005?

Câu trả lời:


296

Bạn có thể sử dụng CAST hoặc CHUYỂN ĐỔI :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
Làm cách nào để bắt / ngăn ngoại lệ khi một trong các trường không phải là số? Tôi đã dự kiến ​​nó sẽ chuyển đổi thành 0.
Chloe

40
Tìm thấy nó:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe

9
Chỉ cần một từ: IsNumeric()có thể tạo ra một số kết quả đồi trụy. Nó sẽ trả về TRUE cho chuỗi "-.", Điều này vẫn sẽ gây ra lỗi khi bạn cố chuyển nó thành một số.
Curt

3
IsNumeric sẽ đúng với các chuỗi có "-" chỉ khi chuỗi là số chẳng hạn "-5" hoặc "-20", nó sẽ sai đối với các chuỗi như "5-", "-2-1". Vì vậy, nếu isNumeric () là đúng thì chuyển đổi không nên ném bất kỳ ngoại lệ nào
Pratyush Dhanuka

11

Cũng cần lưu ý rằng khi chuyển đổi từ chuỗi số tức là '56.72'sang INT, bạn có thể gặp phải lỗi SQL.

Conversion failed when converting the varchar value '56.72' to data type int.

Để giải quyết vấn đề này, chỉ cần thực hiện hai chuyển đổi như sau:

CHUINGI -> SỐ -> INT

hoặc là

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)

Khi sao chép dữ liệu từ TableA sang TableB, chuyển đổi là ẩn, do đó bạn không cần chuyển đổi thứ hai (nếu bạn hài lòng làm tròn xuống INT gần nhất):

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA

8

Bắt đầu với SQL Server 2012, bạn có thể sử dụng TRY_PARSE hoặc TRY_CONVERT .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

Chắc chắn không phải là câu trả lời đúng cho câu hỏi ban đầu vì nó liên quan đến SQL Server 2005, nhưng vì đó là năm 2019 và có ít người hơn bị buộc vào một phiên bản SQL Server cũ như vậy, câu trả lời này chắc chắn rất hữu ích.
shaune

-2

Hãy thử cái này, nó hoạt động với tôi ở Athena:

cast(MyVarcharCol as integer)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.