如何在 SQL IN 子句中使用计算表达式



>我有一个应用程序,它采用逗号分隔的字符串,用于多个 ID 以用于 SQL 查询的"IN"子句。

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN 
    ((SELECT '''' + REPLACE('PARAM(0, Enter ID/IDS. Separate multiple ids by 
    comma., String)', char(44), ''',''') + ''''))

我已经测试过 PARAM 会获取输入的字符串,例如"ID1、ID2",但选择/替换没有执行。声明变成,

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN 
    ((SELECT '''' + REPLACE('ID1,ID2', char(44), ''',''') + ''''))

我正在努力实现,

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN ('ID1', 'ID2')

查询不返回任何结果/错误。我相信相应的记录在我正在使用的数据库中。不知道如何解决这个问题。

你不能这样做。IN运算符需要一个以逗号分隔的参数列表,但您为其提供的单个参数恰好包含逗号分隔的字符串:

如果您使用的是 SQL Server 版本 2016 或更高版本,则可以使用内置string_split将分隔字符串转换为表。

SELECT * 
FROM TABLE 
WHERE [TABLENAME].[COLUMNNAME] 
IN STRING_SPLIT(@CommaDelimitedString, ',')

对于旧版本,您可以选择多个用户定义的函数,我个人最喜欢的是Jeff Moden的DelimitSplit8K。有关更多选项,请阅读 Aaron Bertrand 的 Split 字符串 正确的方式 - 或下一个最佳方式。

相关内容

  • 没有找到相关文章

最新更新