SQL запрос с несколькими условиями и значениями Null, введенными в поиске, не дает результатов

#c# #mysql #sql #asp.net #sql-server

#c# #mysql #sql #asp.net #sql-сервер

Вопрос:

сетевое веб-приложение со страницей поиска У меня есть 3 текстовых поля для выполнения фильтрованного поиска, если я ввел текст во все текстовые поля, результат будет отображаться, но когда я ввел текст только в одно текстовое поле, результат не отображается. мой вопрос в том, как я могу выполнять поиск данных, если я ввел текст только в одно текстовое поле.текстовое поле или два или все текстовые поля, и мой запрос показан ниже:

 SELECT Emp_NUM, Full_name, Mother_Name, Date_of_Birth, Province_of_birth, Job
FROM  [Emp Main Table]
WHERE (Full_name LIKE '%'   @Full_name   '%' OR Full_name IS NULL) AND 
(Mother_Name LIKE '%'   @Mother_Name   '%' OR Mother_Name IS NULL) AND 
(Date_of_Birth LIKE '%'   @Date_of_Birth   '%' OR Date_of_Birth IS NULL)
  

Ответ №1:

Используйте:

 rtrim(coalesce(@Full_name, '')) = ''
  

Вместо:

 @Full_name is null
  

Для проверки на пустые или пустые значения

Комментарии:

1. Почему @Anand вы можете объяснить

2. Например, если ввод пользователя представляет собой пробел, этот код удалит его, поскольку пробел не равен null

Ответ №2:

Может быть, так:

 SELECT [Emp_NUM]
,[Full_name]
,[Mother_Name]
,[Date_of_Birth]
,[Province_of_birth]
,[Job] 
FROM [Emp Main Table] 
WHERE ([Full_name] LIKE '%' @Full_name '%' OR RTRIM(COALESCE(@Full_name,''))='')
AND ([Mother_Name] LIKE '%' @Mother_Name '%' OR RTRIM(COALESCE(@Mother_Name,''))='')
AND ([Date_of_Birth] LIKE '%' @Date_of_Birth '%' OR RTRIM(COALESCE(@Date_of_Birth,''))='')
  

Комментарии:

1. да, верно, я забыл указать это здесь?

2. Вы заметили, что @Full_name РАВНО NULL вместо Full_name РАВНО NULL? Вы должны проверить, возвращает ли пустое текстовое поле NULL — это не обязательно.

3. это мое плохое спасибо за помощь, брат, с наилучшими пожеланиями

4. Я обновил код тем, что показал Ананд ниже. Он будет работать с пробелами в текстовом поле.