使用SQL查询将字符串转换为int


Answers:


296

您可以使用CAST或CONVERT

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
当其中一个字段为非数字时,如何捕获/防止异常?我本来期望它转换为0
克洛伊

40
发现它:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe

9
一句话: IsNumeric()会产生一些错误的结果。它将为字符串“-。”返回TRUE,当您尝试将其强制转换为数字时仍会导致错误。
Curt

3
仅当字符串为数字(例如“ -5”或“ -20”)时,IsNumeric对带有“-”的字符串才为true;对于诸如“ 5-”,“-2-1”的字符串则为false。因此,如果isNumeric()为true,则转换不应引发任何异常
Pratyush Dhanuka

11

还应注意,从数字字符串(即'56.72'INT)转换时,可能会遇到SQL错误。

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

要解决此问题,只需执行两次转换,如下所示:

STRING->数值-> INT

要么

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

将数据从TableA复制到TableB时,转换是隐式的,因此您不需要第二次转换(如果您愿意舍入到最接近的INT):

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

8

从SQL Server 2012开始,您可以使用TRY_PARSETRY_CONVERT

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

绝对不是原始问题的正确答案,因为它与SQL Server 2005有关,但是由于它是2019年,因此使用SQL Server的旧版本的人很少,因此此答案绝对有帮助。
shaune

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.