Sql-запрос, если параметр null У меня есть следующий запрос: SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?; Теперь я хочу, чтобы, если?? NULL, все записи должны быть выбраны. Как я могу достичь этого в SQL? Благодаря Ответ 1 Вы также можете использовать функции IFNULL, COALESCE, NVL, ISNULL для проверки нулевого значения. Это зависит от вашей РСУБД. MySQL SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = IFNULL(?,NAME); или SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = COALESCE(?,NAME); ORACLE SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME); SQL Server/ SYBASE: SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME); Ответ 2 Попробуйте следующее: SELECT * FROM MY_TABLE WHERE @parameter IS NULL OR NAME = @parameter; Ответ 3 SELECT NAME FROM MY_TABLE WHERE NAME LIKE CASE WHEN ? IS NOT NULL THEN ? ELSE '%' END Это будет работать отлично, но вернет только ненулевые значения. Ответ 4 Фолл. запрос будет обрабатывать случай, когда имя (значение столбца таблицы) также может быть NULL: SELECT NAME, SURNAME FROM MY_TABLE WHERE COALESCE(NAME,'') = COALESCE(?,NAME,'');
Ответ 1 Вы также можете использовать функции IFNULL, COALESCE, NVL, ISNULL для проверки нулевого значения. Это зависит от вашей РСУБД. MySQL SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = IFNULL(?,NAME); или SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = COALESCE(?,NAME); ORACLE SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME); SQL Server/ SYBASE: SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME);
Ответ 3 SELECT NAME FROM MY_TABLE WHERE NAME LIKE CASE WHEN ? IS NOT NULL THEN ? ELSE '%' END Это будет работать отлично, но вернет только ненулевые значения.
Ответ 4 Фолл. запрос будет обрабатывать случай, когда имя (значение столбца таблицы) также может быть NULL: SELECT NAME, SURNAME FROM MY_TABLE WHERE COALESCE(NAME,'') = COALESCE(?,NAME,'');