Подтвердить что ты не робот

Например, "%" не принимает значение NULL

У меня есть запрос, который создается из пользовательских входов (передается через html-форму). Это выглядит (простой пример):

Select * From [table] Where [table].[column] like '<parameter>'

Этот параметр может быть необязательным, поэтому, если пользователь оставил соответствующее поле ввода пустым, я передаю %. Он работал нормально, пока не столкнулся с значениями NULL. Я понимаю, что символы соответствия "%" не равны нулю, но я хотел бы рассматривать NULL как пустую строку в этом случае.

Что мне делать? Изменить запрос (как?) Или передать другой символ (символы), когда пользователь оставил пустой ввод?

Спасибо.

PS. Это реальная проблема из существующей системы, и я знаю ее далеко не оптимальное решение, но мне приходится иметь дело с ней.

4b9b3361

Ответ 1

Вы можете использовать coalesce для обработки нулевого значения, как пустая строка:

where COALESCE([table].[column],'') like '<parameter>'

В SQL Server вы также можете использовать IsNull:

where IsNull([table].[column],'') like '<parameter>'

Ответ 2

isnull([table].[column], '') like '%'

работает как шарм

Ответ 3

Я думаю, это может сработать:

Select * From [table] Where [table].[column] is null or [table].[column] like '<parameter>'

Ответ 4

Ну, как насчет

SELECT 
  * 
FROM 
  [table] 
WHERE
  ([table].[column] like <parameter>) OR 
  (<parameter> = '%')

... так что, когда вы передаете "%", вы возвращаете все строки, в противном случае он работает так же, как и в данный момент.

Ответ 5

Сделайте два утверждения! Если пользователь не прошел ни одного параметра пользователя:

Select * From [table] Where [table].[column] like '%' or [table].[column] is null;

Ответ 6

как насчет..

Select * From [table] Where ISNULL([table].[column], '') like '<parameter>'

Таким образом, это займет ваше фактическое значение столбца, или если это null пустая строка и сравните ее, аганируйте свой параметр, предполагая, что вы используете ms sql server..

Ответ 7

Основано на Указатель в разделе Where > Проблема с этим подходом

where COALESCE([table].[column],'') like '<parameter>'

Есть:

Если вы использовали индекс в своем [столбце], из-за функции COALESCE, SQL Server не может использовать ваш индекс, это означает, что вы потеряли свой индекс

И

Проблема с этим подходом

Where [table].[column] like '%' or [table].[column] is null

Есть:

Если [table]. [column] имеет значение null, тогда код будет выглядеть следующим образом:

Where null like '%' or [table].[column] is null

и независимо от второй части предложения Where ([table]. [column] имеет значение null) результатом оценки будет UNKNOWN и фильтр SQL Server, который записывается.

NULL ИЛИ True = UNKNOWN

NULL ИЛИ False = UNKNOWN

Итак, это оптимизированный и нулевой подход:

Select * From [table] 
 WHERE 
      CASE 
          WHEN [table].[column] IS NULL THEN 1 
          WHEN [table].[column] like '<parameter>' THEN 1 
          ELSE 0 
      END   =  1

Ответ 8

Добрый день, используйте это решение, я думаю, что это смесь решений:

@parameter nvarchar (30)

if @parameter = ''
      Begin
          Set @parameter = '%'
      End

select * from [table] as t where ISNULL (t. [column], '') like '%' + @parameter + '%'

Если вы просто хотите начать с параметра, удалите первый символ "%" и "плюс"

Надеюсь, вы сочтете это полезным.

Ответ 9

Мне нужно что-то похожее, чтобы действительно найти "%" (все), включая нуль или определенное значение при вводе.

Для Oracle isnull не работает и в моем случае COALESCE.

Я использовал эту опцию в предложении where:

where decode(table1.field1,null,' ',table1.field1) like '%'

Надеюсь, что это сработает для других.

Ответ 10

Для SQLITE

SELECT * FROM [table] WHERE IFNULL([table].[column],'') like '<parameter>'