【问题标题】:SQL - Convert String of numbers to list of integers [duplicate]SQL - 将数字字符串转换为整数列表[重复]
【发布时间】:2014-05-14 16:13:56
【问题描述】:

我正在传递一个数字字符串,并希望将此字符串转换为数字列表,例如

SELECT personID from person WHERE personID IN ('927,6944')

如何将 ('927,6944') 转换为 (927,6944)

这是我尝试运行查询时收到的错误消息:

消息 245,第 16 级,状态 1,第 1 行 将 varchar 值 '927,6944' 转换为数据类型 int 时转换失败。

【问题讨论】:

  • 你从哪里生成 '927,6944'?
  • 从错误信息来看,很明显是MS SQL Server。
  • 这个答案也可以满足你的需要:stackoverflow.com/questions/18744391/…
  • 我将 '927,6944' 作为通过 java 代码生成的字符串值传递。此值通常会有所不同,并且可以包含更大的数字字符串。是的,这是我在 SQL 服务器上运行查询时收到的一条 SQL 消息。
  • 如果您将字符串传递给存储过程参数,请查看这篇文章:stackoverflow.com/questions/19334380/…

标签: java sql sql-server


【解决方案1】:

去掉引号(引号暗示 varchar)

SELECT personID FROM person WHERE personID IN (927, 6944)

【讨论】:

  • 此外,将, 替换为', ' 将解决报价问题,从而为您提供IN ('972','6944')。转换会正常进行。
  • OP 说他正在从程序中传递值
  • 在整数上使用引号!!!用火杀死它!!!
  • 希望如此简单,但我将此值作为字符串传递。字符串中的数字数量可能会有所不同。即它不会总是'927, 6944'。
  • 你也在传递引号?删除它们或(上帝帮助我们所有人)按照上面 paqogomez 的建议进行操作。
【解决方案2】:

您需要使用动态 sql。将值 '927,6944' 传递为 @Parameter

DECLARE @Parameter varchar(100)
DECLARE @Query varchar(200)
SET @Parameter='927,6944'   --An example

SET @Query='SELECT personID from person WHERE personID IN ('+@Parameter+')'
EXEC(@Query);

说明:

在执行时,@Query 包含以下内容:

SELECT personID FROM person WHERE personID IN (927, 6944)

您需要从程序本身进行整个查询并直接执行。

【讨论】:

  • 这是不好的做法,而且有潜在的危险。
【解决方案3】:

我怀疑可以从您的 java 代码中生成此查询而不带引号。包含这些数字的字符串在注入 SQL 时不需要包含引号。如果由于某种原因在进行查询时不容易删除引号,请尝试通过您的 java 代码中的字符串替换方法传递它,该方法将去除引号。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 2012-05-08
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多