检查字符串的第一部分是否在表中的值列表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查字符串的第一部分是否在表中的值列表中相关的知识,希望对你有一定的参考价值。

孤立了这么长时间,我有点空白,无法解决这个简单的问题。

我在表中有一个值列表。我想检查@variable中文本的第一部分是否包含表中的任何值。当它完全匹配时它可以工作,但是我不确定如何对字符串的一部分进行处理。

CREATE TABLE [ExclusionCriteria](
    [ID] [uniqueidentifier] NOT NULL,
    [Criteria] [nvarchar](100) NOT NULL,
 CONSTRAINT [PK_ExclusionCriteria] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


ALTER TABLE [ExclusionCriteria] ADD  CONSTRAINT [DF_ExclusionCriteria_ID]  DEFAULT (newid()) FOR [ID]

INSERT INTO [ExclusionCriteria] (Criteria)
VALUES ('Test1'), ('Test2'),('Another string'),('Test string 4')

DECLARE @TestValue NVARCHAR(100) = 'Test1 but with some more text on the end'

SELECT * FROM ExclusionCriteria WHERE Criteria LIKE @TestValue

我希望它匹配,因为@TestValue的第一部分包含Test1。我尝试使用子字符串,但根据匹配的内容,“条件”的长度始终不同。

我想我想做一个类似于列表中的'foreach'的事情,但是无法弄清楚如何使用SQL做到这一点。这将是某些逻辑的一部分,因此需要遵循if @TestValue Begins With (any of the values in [ExclusionCriteria]) true else false

SQL是否有可能,或者我是否必须更改方法?我宁愿不必将所有值硬编码为长IN语句。

答案

您需要反转顺序并添加尾随通配符

SELECT * 
FROM ExclusionCriteria 
WHERE @TestValue LIKE Criteria + '%'

以上是关于检查字符串的第一部分是否在表中的值列表中的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在表中的多个下拉列表中选择相同的值并 POST 到服务器

检查多个列在表值参数中具有多个值中的任何一个

T-SQL:如何在值列表中选择不在表中的值?

搜索字符串并在表中插入值

在表中插入行的副本并检查重复项

NSURLErrorDomain 中代码的含义是啥?