Поиск по nvarchar - PullRequest
       18

Поиск по nvarchar

1 голос
/ 26 апреля 2010

У меня есть эта проблема.В таблице у меня есть столбец, который имеет тип nvarcar.и строка в этом столбце: строка1 = 1; 6 строка2 = 12 строка3 = 6; 5; 67 и т. д ... Я пытаюсь найти этот столбец.например, когда я отправляю 1, я пытаюсь получить только row1.Я использую LIKE, но в наборе результатов я получаю row1 и row2.

Как мне этого добиться, любая помощь приветствуется.Tnx ...

Ответы [ 3 ]

2 голосов
/ 26 апреля 2010

нормализуйте ваши таблицы! , хранение нескольких значений в одном столбце вызовет у вас горе, пока вы используете этот дизайн.может показаться, что хранить данные таким способом проще, но, как вы видите, запросы к этим данным сложно выполнить, и создаваемые вами запросы будут ужасными и не смогут использовать индекс.

0 голосов
/ 26 апреля 2010

Не особенно элегантно, но это выполняет свою работу .

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
0 голосов
/ 26 апреля 2010

У вас есть четыре варианта, где ключ может быть:

  • Это может быть весь ключ
  • В начале
  • Посередине
  • В конце

Следовательно, вы должны выбрать для каждой отдельной возможности, например, так:

SELECT *
FROM MyTable
WHERE MyColumn = @Key
   OR MyColumn LIKE @Key + ';%'
   OR MyColumn LIKE '%;' + @Key + ';%'
   OR MyColumn LIKE '%;' + @Key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...