检查字符串的第一部分是否在表中的值列表中
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 + '%'
以上是关于检查字符串的第一部分是否在表中的值列表中的主要内容,如果未能解决你的问题,请参考以下文章