【问题标题】:How to convert a string to integer in SQL Server 2008?如何在 SQL Server 2008 中将字符串转换为整数?
【发布时间】:2014-11-20 21:10:41
【问题描述】:

我受到 SQL Server 的挑战。我有这个简单的查询

SELET * 
FROM mytable
WHERE ISNUMERIC(propertyvalue) = 1 
  AND CONVERT(int, CONVERT(decimal(9, 0), ISNULL(propertyvalue, 0 ))) > 0 

我尝试将转换线从

CONVERT(decimal(9, 0), ISNULL(propertyvalue, 0))

CONVERT(decimal(9, 2), ISNULL(propertyvalue, 0))

CAST(ISNULL(propertyvalue, 0) AS numeric)

我正在尝试的一切都没有像以前那样奏效。我不断收到此错误

消息 8114,第 16 级,状态 5,第 1 行
将数据类型 varchar 转换为数值时出错。

关于如何解决这个问题的任何想法?

已编辑

propertyvalue 的类型为varchar(255),并且具有类似的数据

2
1.5
2.1
String
1String 456

【问题讨论】:

  • 你能举一个不会转换的数据的例子吗?
  • propertyvalue - 什么类型?
  • @jpw 这个,例如:ISNUMERIC('1e1')
  • 我刚刚用分析器更新了我的问题
  • Dave Gugg 的正确答案如下。在您的 select 语句的 where 子句中,因为 ISNUMERIC(...) = 1 和 CONVERT(..) > 0 条件处于同一级别,无论值是否为数字,它们都会被评估。必须先过滤非数字值。

标签: sql sql-server numeric typeconverter


【解决方案1】:

我相信你需要在尝试转换之前过滤掉字符串数据:

 SELECT *
 INTO   #temp
 FROM   mytable
 WHERE  propertyvalue NOT LIKE '%[^0-9]%' 

 SELECT *
 FROM   #temp
 WHERE  CONVERT(INT, CONVERT(DECIMAL(9, 0), ISNULL(propertyvalue, 0))) > 0

 DROP TABLE #temp

【讨论】:

  • 它不工作。我也尝试在选择中进行转换,但这不起作用。将数据类型 varchar 转换为数字时出错。
  • 仅仅因为您使用的是CTE,并不意味着首先过滤结果。此外,这不考虑像 '1e1' 这样的值,其中 ISNUMERIC 返回 1
  • 已编辑以更正 Lamak 的第一个反对意见。至于 ISNUMERIC “错误”,我没有一个好的方法来纠正。有什么建议吗?
  • 真正的问题是 ISNUMERIC 被“1e1”之类的值“欺骗”。 sqlservercentral.com/Forums/Topic243646-8-1.aspx
  • 另一个想法是使用 TRY_PARSE(propertyvalue as int)。条件是 WHERE TRY_PARSE(propertyvalue as int) IS NOT NULL。
【解决方案2】:

我认为它与句号有关,它不知道如何转换它。

你试过浮动吗?

CONVERT(float, ISNULL(propertyvalue, 0 ))

【讨论】:

  • 为我工作,如果你直接复制你的查询,你有选择而不是选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多