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

Rah*_*yas 150 sql sql-server-2005

如何在SQL Server 2005上使用SQL查询将字符串转换为整数?

CMS*_*CMS 271

您可以使用CAST或CONVERT:

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table
Run Code Online (Sandbox Code Playgroud)

  • 找到它:`选择CASE WHEN ISNUMERIC('x')= 1那么CAST('x'AS INT)ELSE 0 END (37认同)
  • 简而言之:`IsNumeric()`会产生一些反常的结果.它将为字符串" - ."返回TRUE,当您尝试将其强制转换为数字时仍会导致错误. (9认同)
  • 当其中一个字段是非数字时,如何捕获/阻止异常?我原以为它会转换为0. (4认同)
  • 对于带有" - "的字符串,IsNumeric将为true,仅当字符串为数字(例如"-5"或"-20")时,对于"5-"," - 2"等字符串,它将为false.因此,如果isNumeric()为true,则转换不应抛出任何异常 (3认同)

Örj*_*mte 12

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

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)
Run Code Online (Sandbox Code Playgroud)

  • 这绝对不是原始问题的正确答案,因为它与 SQL Server 2005 有关,但由于现在是 2019 年,越来越少的人使用如此旧版本的 SQL Server,因此这个答案绝对有帮助。 (2认同)

Ste*_*las 11

另请注意,从数字字符串ie转换'56.72'为INT时,您可能会遇到SQL错误.

Conversion failed when converting the varchar value '56.72' to data type int.
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,请按以下步骤进行两次转换:

STRING - > NUMERIC - > INT

要么

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA
Run Code Online (Sandbox Code Playgroud)