Как записать, что пустой сейф выдерживает сравнение “<=>” в чистом SQL?

Вы можете попробовать некоторые вещи, которые он предлагает. Я бы снова начал синхронизацию Gradle: в Android Studio выполните File -> Sync Project with Gradle Files

. Это обеспечит загрузку всех зависимостей.

7
задан Community 23 May 2017 в 10:29
поделиться

4 ответа

Смежный вопрос: получить нулевой == нулевой в SQL. Но этот ответ требует, чтобы поисковое значение было написано 2 раза (то есть: 2 знака вопроса в моем PreparedStatement)!?

Ответы второго ранга и последующие дают метод, который делает это без привязки поискового значения дважды:

SELECT * FROM ROUTERS 
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');

Обратите внимание, что для этого требуется фиктивное значение, которое никогда не может быть допустимым значением столбца (это «вне диапазона»); Я использую пустую строку. Если у вас нет такого значения, вам придется смириться с привязкой значения дважды:

SELECT * FROM ROUTERS 
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);
9
ответ дан 6 December 2019 в 11:52
поделиться

В SQL NULL не равен самому себе. Таким образом, вы можете:

1 - заменить его фиктивным значением и сравнить его, как в:

SELECT * FROM ROUTERS WHERE ISNULL(ROUTER_ADDRESS,'xxx') <=> ISNULL(?,'xxx')

или

2 - заменить его более сложным логическим тестом, как в:

SELECT *
FROM ROUTERS 
WHERE (
       (ROUTER_ADDRESS IS NULL AND ? IS NOT NULL)
       OR
       (ROUTER_ADDRESS IS NOT NULL AND ? IS NULL)
       OR
       (ROUTER_ADDRESS IS NOT NULL AND ? IS NOT NULL AND ROUTER_ADDRESS <> ?
      )
2
ответ дан 6 December 2019 в 11:52
поделиться

If you want ROUTERS where ROUTER_ADDRESS is null when ? is null then possibly this could work:

SELECT * 
FROM ROUTERS 
WHERE ROUTER_ADDRESS = (case when ROUTER_ADDRESS is null and ? is null then null 
                             else ? end)
0
ответ дан 6 December 2019 в 11:52
поделиться

Стандартные NULL-безопасные операторы равенства в SQL: ОТЛИЧИТСЯ ОТ и НЕ ОТЛИЧИТСЯ ОТ .

6
ответ дан 6 December 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: