Вторият и следващите отговори дават метод за това, без да се обвързва стойността за търсене два пъти:
SELECT * FROM ROUTERS
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
Имайте предвид, че това изисква фиктивна стойност, която никога не може да бъде валидна стойност на колона (това е "извън диапазона"); Използвам празния низ. Ако нямате такава стойност, ще трябва да се примирите с обвързването на стойността два пъти:
SELECT * FROM ROUTERS
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);