2013-10-25 2 views
0

Я следующий код в SQL Server,Проблема связана с не равно (<>) в SQL Server

declare @previouspulse int = 0 
declare @previousox int = 0 
declare @Pulse int = 0 
declare @SpO2 int = 0 

set @previouspulse = null 
set @Pulse= 121 
set @previousox = 56 
set @SpO2 = null 

IF @previouspulse <> @Pulse or @previousox <> @SpO2 
    select -1 
else 
    select -2 

я получаю результат -2 сверху кода

мой вопрос заключается в том, что:

если символ <> означает not equal to, то я должен получить результат -1 вместо -2

так и в состоянии, в Або ве кода, если один из условия удовлетворены, если условие, то я должен получить результат -1, а в моем случае я получаю true в обоих confition, если символ '<>' означает 'Not Equal to(!=)'

так делает это на самом деле, что символ '<>' означает 'Not Equal to(!=)' ???

Благодаря

+5

Сравнения операторы не работают для 'значений null'. Для этого вы должны использовать для этого оператор 'IS'. –

+0

@ Айшварья: стандартный оператор SQL «не равен» ** является ** '<>' Но '! =' Принимается всеми (?) СУБД в качестве альтернативы. Между ними нет никакой разницы - особенно в отношении обработки NULL –

ответ

1

NULL значения представляют отсутствует или неизвестен data.It не представляется возможным проверить NULL значений с операторами сравнения , такие как =, <, или <>, потому что сравнение с неизвестными данными приводит к неизвестным данным.

оператор Используйте ISNULL, чтобы получить правильные результаты из сравнения как:

declare @previouspulse int = 0 
declare @previousox int = 0 
declare @Pulse int = 0 
declare @SpO2 int = 0 

set @previouspulse = null 
set @Pulse= 121 
set @previousox = 56 
set @SpO2 = null 

IF isnull(@previouspulse,0) <> isnull(@Pulse,0) or isnull(@previousox,0) <> isnull(@SpO2,0) 
    select -1 
else 
    select -2 
4

Вот причина, почему,

@previouspulse <> @Pulse OR @previousox <> @SpO2 
       NULL  OR   NULL 
         NULL 

, поскольку у вас есть только два пути, он падает на FALSE блока, что приводит к -2. В сравнении с NULL используется значение IS NULL или IS NOT NULL.

0

Вы можете использовать функцию ISNULL, прежде чем сравнивать переменные

declare @previouspulse int = 0 
declare @previousox int = 0 
declare @Pulse int = 0 
declare @SpO2 int = 0 

set @previouspulse = null 
set @Pulse= 121 
set @previousox = 56 
set @SpO2 = null 

IF ISNULL(@previouspulse,0) <> @Pulse or @previousox <> ISNULL(@SpO2,0) 
    select -1 
else 
    select -2 
Смежные вопросы