2015-02-18 9 views
0

Здравствуйте и заблаговременно за помощь в создании noob. Я попробовал несколько разных поисков и не смог найти пример, где % является альтернативным значением, поэтому я приношу свои извинения, если это дублированный поток.SQL Server: Return NULL: SELECT * FROM table WHERE поле LIKE '%'

Мои данные выглядит следующим образом

Table Name = stored_item

Item | Location | Hu 
--------------------------- 
K134 | LOC01 | LP1 
K125 | LOC02 | LP2 
K345 | LOC03 | 
K939 | LOC05 | LP5 
K235 | LOC05 | LP5 

мне нужно запросить таблицу и нужно возвращать результаты, основанные на том, где положение на Hu колонке.

код выглядит следующим образом: где х может быть любое значение Hu или%, чтобы указать поиск всех значений (включая нулевые значения)

DECLARE @hu nvarchar(15) 
    SET @hu = 'X' 

SELECT Item, Hu 
FROM stored_item 
WHERE Hu LIKE @hu 

Если X = «ЛП5» то результаты должны выглядеть следующим образом:

Item | Location | Hu 
--------------------------- 
K939 | LOC05 | LP5 
K235 | LOC05 | LP5 

IF X = '%' Тогда результаты должны выглядеть следующим образом:

Item | Location | Hu 
--------------------------- 
K134 | LOC01 | LP1 
K125 | LOC02 | LP2 
K345 | LOC03 | 
K939 | LOC05 | LP5 
K235 | LOC05 | LP5 

ответ

1

Попробуйте это:

DECLARE @hu nvarchar(15) 
SET @hu = 'X' 

SELECT Item, Hu 
FROM stored_item 
WHERE @hu = '%' OR Hu LIKE @hu 

В этом случае, если ваш параметр % условие @hu = '%' вызовет WHERE игнорирование условия, в противном случае вторая часть условия будут использоваться

+0

Это фиксированная это право! Если вы не возражаете, можете предоставить немного больше информации о том, почему это работает, я знаю, что я довольно новичок в SQL, но эта часть @hu =% заставляет меня почесывать голову. –

1

Вы также можете использовать функцию COALESCE на колонке вы хотели бы искать. Это преобразует значения NULL в значение по вашему выбору. Поскольку значение, отличное от NULL, будет соответствовать «%», использование этой методики также вернет строки NULL. Таким образом вы можете использовать значение @hu с регулярными подстановочными знаками (например,%), разрешенными с помощью LIKE. Если вы хотите только выбрать строки, начинающиеся с LP, а не строку NULL, например, вы можете установить @hu в «LP%».

DECLARE @hu nvarchar(15) 
SET @hu = '%' 

SELECT Item, Hu 
FROM stored_item 
--The value you use in Coalesce should never exist in the table. This can be 
--accomplished by using a string that is longer than the Hu column could hold. 
--In my case, the Hu column is a VARCHAR(3), so 4 positions should be enough. 
WHERE COALESCE(Hu, 'XXXX') LIKE @hu 

Я использовал эти тестовые данные для этого запроса:

CREATE TABLE stored_item 
([Item] varchar(4), [Location] varchar(5), [Hu] varchar(3)) 
; 

INSERT INTO stored_item 
([Item], [Location], [Hu]) 
VALUES 
('K134', 'LOC01', 'LP1'), 
('K125', 'LOC02', 'LP2'), 
('K345', 'LOC03', NULL), 
('K939', 'LOC05', 'LP5'), 
('K235', 'LOC05', 'LP5') 
; 

Более подробную информацию о функции COALESCE: https://msdn.microsoft.com/en-us/library/ms190349.aspx

Смежные вопросы