搜索nvarchar

时间:2010-04-26 11:37:22

标签: sql-server tsql

我有这个问题。在表I中,列为nvarcar类型。 并且此列中的行是row1 = 1; 6 row2 = 12 row3 = 6; 5; 67等... 我试着搜索这个专栏。例如,当我发送1我尝试只获得row1。我使用LIKE但是在结果集中我得到了row1和row2。

我如何实现这一点,任何帮助表示赞赏。 Tnx ......

3 个答案:

答案 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