#sql #string #oracle #where-clause
#sql #строка #Oracle #where-предложение
Вопрос:
У меня есть требование, при котором мне нужно показывать результаты на основе входной строки в отчете, извлекаемом из базы данных.
В нем есть поля ввода firstname, lastname и dob.
Пример: если я выполняю запрос с именем в поле firstname, а остальные 2 оставляю пустыми, я должен получить все результаты с этим именем и отобразить все 3 поля в отдельной таблице в отчете (учитывая также значения null в столбцах) .
Я ранее написал этот запрос —
select *
from Emp_table
where f_fname like v_fname and f_lname like v_lname and f_dob like v_dob
Здесь v_fname — это —
v_fname: = случай, когда in_fname равно нулю, тогда ‘%’ else in_fname end;
(in_fname — значение входного запроса)
Но в этом случае, если какой-либо столбец имеет значение null (fname, lname или dob), запрос его не распознает.
Пожалуйста, предложите консолидированный запрос, который будет принимать все 3 значения — ‘%’, null или входное значение.
Пример —
Пустые значения, приведенные в образце выходных данных, извлекаются из базы данных и являются нулевыми.
Комментарии:
1. Примеры данных и ожидаемый результат вместе со структурой таблицы в текстовом формате были бы полезны
2. Как и предлагал @Sujitmohanty30, любезно предоставьте примеры входных и выходных данных. Объясните, как получить ожидаемый результат из ваших входных данных. Затем вы получите код для получения ожидаемого результата.
3. Добавлен пример ввода и вывода
Ответ №1:
Вы можете четко указывать null
значения параметров:
select *
from emp_table
where
(v_fname is null or f_fname like v_fname)
and (v_lname is null or f_lname like v_lname)
and (v_dob is null or f_dob like v_dob)
Если параметру присвоено null
значение, принимается любое значение (включая null
значения). Если значение параметра равно '%'
, то допускается все, что угодно, кроме null
значений. Любое другое значение принимается в качестве литерального фильтра.
Однако имейте в виду, что если параметр имеет встроенный знак процента, они будут интерпретироваться как символы подстановки. Это может быть или не быть тем, что вы хотите.
Комментарии:
1. Если я даю f_lname в качестве входного запроса, его извлекаемые записи с f_lname, а также те записи, где f_lname, f_fname и f_dob все равны нулю, или f_fname, f_lname равны нулю и т.д..
2. @ananya0208: Как сказал GMB: просто четко указывайте значения null. Если вам нужно другое правило, показанное GMB, затем примените это другое правило. Может быть, вы хотите
(f_fname like v_fname or (v_fname is null and f_fname is null)) and ...
.3. Я привел пример ввода и вывода, просто нужно получить результаты таким образом — указав имя ввода, и результаты, которые извлекаются, могут содержать нулевые / ненулевые значения для других столбцов.
4. @ananya0208: Оба предложения GMB и my
WHERE
будут выбирать образцы строк, которые вы показываете. Возможно, вам нужно показать лучший пример (и в виде текста, а не в виде изображений, пожалуйста), показывающий не только параметры и результат, но и данные таблицы. И в любом случае, что мешает вам изменить нашиWHERE
предложения, чтобы они соответствовали правилам, которые вы имеете в виду? Вы понимаете нашиWHERE
предложения? Или в них есть что-то, чего вы не понимаете?