Что лучший способ состоит в том, чтобы преобразовать интервал или пустой указатель к булеву значению в SQL-запросе?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

34
задан Edward Brey 16 May 2014 в 19:27
поделиться

7 ответов

К моему знанию (исправляют меня, если я неправ), нет никакого понятия литеральных булевых значений в SQL. У Вас может быть оценка выражений к булевым значениям, но Вы не можете произвести их.

С учетом вышесказанного, можно использовать СЛУЧАЙ, КОГДА произвести значение, можно использовать в сравнении:

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 
52
ответ дан 27 November 2019 в 16:19
поделиться
SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

я думаю, что это проходит примерно так

На самом деле, ISNULL, возможно, должен быть, КОГДА thevalue ЯВЛЯЕТСЯ ПУСТЫМ ЗАТЕМ 0

4
ответ дан 27 November 2019 в 16:19
поделиться

Никакая потребность к варианту использования..., когда:

select (column_name is not null) as result from table_name;

Возвраты 1 для всех полей, не ПУСТЫХ и 0 для всех полей, которые являются ПУСТЫМИ, который так близок, как можно добраться до булевских переменных в SQL.

19
ответ дан 27 November 2019 в 16:19
поделиться

Принятие Вас хочет 0,1 значения как возврат, и что мы говорим о целом числе, я использовал бы логику, указанную TorbjГ¶rn, и перенес бы его в функцию

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end

таким образом, можно использовать его каждый раз, когда Вам нужно путем простого вызова

select dbo.isNotNull(myIntColumn) from myTable

ответ обеспеченный , Tomalak более универсален хотя, поскольку это работало бы с любым типом данных

4
ответ дан 27 November 2019 в 16:19
поделиться
isnull(column - column + 1, 0) != 0
2
ответ дан 27 November 2019 в 16:19
поделиться

Можно хотеть сделать Преобразование (BIT, Значение) результата. Поскольку что-то, SQL возвратит ошибку, что значение не является булевской переменной.

3
ответ дан 27 November 2019 в 16:19
поделиться

В Oracle принимая Вы используете 0 для лжи и 1 для true:-

SELECT DECODE( col, NULL, 0, 1) FROM ...

, который можно также записать этому использованию синтаксиса СЛУЧАЯ, но вышеупомянутое идиоматично в Oracle. ДЕКОДИРУЙТЕ немного похож на переключатель/случай; если седло является ПУСТЫМ затем 0, возвращается, еще 1.

1
ответ дан 27 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

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