Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用逗号分隔的类SQL_Sql_Sql Server - Fatal编程技术网

用逗号分隔的类SQL

用逗号分隔的类SQL,sql,sql-server,Sql,Sql Server,我有一个SQL查询,它涉及检索与逗号分隔的搜索字符串匹配的记录 e、 g.键入“wis”将返回 WIS82763 “智慧,太阳”将会回来 WIS82763& SUN37483 我使用的是(T.ReceiptNo类似于“%”++@ReceiptNo++“%”),但显然它不适用于逗号分隔的字符串。我尝试了许多不同的组合和变化,但都没有给我想要的结果。请给出建议。假设您使用SQLServer,并且逗号分隔字符串中的每个单词都有3个字母,您可以这样做 如果您需要更复杂的逻辑,您可能必须通过UDF实现它(

我有一个SQL查询,它涉及检索与逗号分隔的搜索字符串匹配的记录

e、 g.键入“wis”将返回

WIS82763

“智慧,太阳”将会回来

WIS82763& SUN37483


我使用的是
(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%”这样的列