我有这个问题。在表I中,列为nvarcar类型。 并且此列中的行是row1 = 1; 6 row2 = 12 row3 = 6; 5; 67等... 我试着搜索这个专栏。例如,当我发送1我尝试只获得row1。我使用LIKE但是在结果集中我得到了row1和row2。
我如何实现这一点,任何帮助表示赞赏。 Tnx ......
答案 0 :(得分:2)
规范化您的表格,只要您使用此设计,在单个列中存储多个值就会让您感到悲伤。以这种方式存储数据似乎更容易,但正如您所看到的那样,很难查询这些数据,而您创建的查询将非常糟糕,并且无法使用索引。
答案 1 :(得分:0)
密钥的位置有四种可能性:
因此,您必须选择每种不同的可能性,如下所示:
SELECT *
FROM MyTable
WHERE MyColumn = @Key
OR MyColumn LIKE @Key + ';%'
OR MyColumn LIKE '%;' + @Key + ';%'
OR MyColumn LIKE '%;' + @Key
答案 2 :(得分:0)
不是特别优雅,但完成工作。
DECLARE @Table TABLE (Row NVARCHAR(32))
INSERT INTO @Table VALUES ('1;6')
INSERT INTO @Table VALUES ('12')
INSERT INTO @Table VALUES ('6;5;67')
SELECT *
FROM @Table
WHERE Row = '1'
OR Row LIKE '%;1'
OR Row LIKE '1;%'
OR Row LIKE '%;1;%'
跟进您的评论:这适用于SQL Server 2005。
CREATE TABLE Analysis (Text1 NVARCHAR(32))
GO
CREATE PROCEDURE [dbo].[Test] @Key as nvarchar AS
SELECT *
FROM dbo.Analysis
WHERE Text1 = @Key
OR Text1 LIKE '%;'+ @Key
OR Text1 LIKE @Key + ';%'
OR Text1 LIKE '%;' + @Key + ';%'
GO
EXEC Test '1'
DROP PROCEDURE Test
DROP TABLE Analysis