用逗号分隔的类SQL
我有一个SQL查询,它涉及检索与逗号分隔的搜索字符串匹配的记录 e、 g.键入“wis”将返回 WIS82763 “智慧,太阳”将会回来 WIS82763& SUN37483用逗号分隔的类SQL,sql,sql-server,Sql,Sql Server,我有一个SQL查询,它涉及检索与逗号分隔的搜索字符串匹配的记录 e、 g.键入“wis”将返回 WIS82763 “智慧,太阳”将会回来 WIS82763& SUN37483 我使用的是(T.ReceiptNo类似于“%”++@ReceiptNo++“%”),但显然它不适用于逗号分隔的字符串。我尝试了许多不同的组合和变化,但都没有给我想要的结果。请给出建议。假设您使用SQLServer,并且逗号分隔字符串中的每个单词都有3个字母,您可以这样做 如果您需要更复杂的逻辑,您可能必须通过UDF实现它(
我使用的是
(T.ReceiptNo类似于“%”++@ReceiptNo++“%”)
,但显然它不适用于逗号分隔的字符串。我尝试了许多不同的组合和变化,但都没有给我想要的结果。请给出建议。假设您使用SQLServer,并且逗号分隔字符串中的每个单词都有3个字母,您可以这样做
如果您需要更复杂的逻辑,您可能必须通过UDF实现它(在这种情况下,为了更好的性能,最好创建CLR UDF)。这似乎是一个创建动态sql的地方。字符串中的每个元素都会在where子句中变成一行新的LIKE。它最终会看起来像:
(
T.ReceiptNo LIKE '%WIS%'
OR T.ReceiptNo LIKE '%SUN%'
)
如何执行此操作取决于您在何处构建SQL。您使用的是存储过程还是内联SQL?下面的查询将提供所需的结果
DECLARE @likeValue VARCHAR(5000),
--@ReceiptNo VARCHAR(500),
@selectSql VARCHAR(500),
@sql VARCHAR(5000)
--SET @ReceiptNo ='wis,sun'
-- Put Select SQL
SET @selectSql = 'SELECT * FROM TableName AS T '
-- Splitting the string as required
SET @likeValue = REPLACE(@ReceiptNo, ',', '%'' OR T.ReceiptNo LIKE ''%')
-- Making a single query by concatenating all
SET @sql = @selectSql + ' WHERE T.ReceiptNo LIKE ''%'+ @likeValue + '%'''
--Finally executing the sql query
EXEC(@sql)
只是您的搜索字符串是逗号分隔的,还是数据库中有逗号分隔的值?@a1ex07看起来像是T-SQL语法。我正在重新标记此sql server。OP如果标记错误,请随意更正。@user415795-要回答NullUserExceptions问题,您需要像“%WIS%”这样的列或像“%SUN%”这样的列,还是需要像“%WIS%SUN%”这样的列