Поиск четных или нечетных значений ID

Я работал над запросом сегодня, который потребовал от меня использовать следующее, чтобы найти все значения идентификатора нечетного числа

(ID % 2) <> 0

может кто-нибудь сказать мне, что это делаешь? Это сработало, и это здорово, но я хотел бы знать, почему.

9 ответов


ID % 2 проверяет, что такое остаток, если вы разделите ID на 2. Если вы делите число на 2, он всегда будет иметь остаток 0. Любое другое число (нечетное) приведет к ненулевому значению. Что это проверка.


для нахождения четного числа мы должны использовать

select num from table where ( num % 2 ) = 0

ID % 2 уменьшает все целочисленные (денежные и числовые также разрешены) числа до 0 и 1 эффективно.
Читать о оператор по модулю в руководстве.


Он берет идентификатор, делит его на 2 и проверяет, не равен ли остаток нулю; это означает, что это нечетный идентификатор.


как показано ниже Doc укажите

дивиденда % делитель

возвращает остаток от деления одного числа на другое.

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/modulo-transact-sql#syntax

13 % 2 возврат 1

Следующая часть <> что означает "не равно".

поэтому то, что означает ваше заявление Остаток ID, когда он делится на 2 не равен 0

будьте осторожны, потому что это не будет работать в базе данных Oracle. Такое же выражение будет как ниже.

MOD(ID, 2) <> 0

в oracle,

select num from table where MOD (num, 2) = 0;

дивиденда % делитель

Dividend-числовое выражение для деления. Дивидендом должно быть любое выражение типа данных integer в sql server.

Divisor-числовое выражение для деления дивиденда. Делитель должен быть выражением целочисленного типа данных, за исключением sql server.

SELECT 15 % 2

Output
1

дивиденды = 15

делитель = 2

предположим, вы хотите запросить

запросить список названий городов от станции с четным идентификатором только цифры.

структура схемы для станции:

ID Number

CITY varchar

STATE varchar


select CITY from STATION as st where st.id % 2 = 0

Will fetch the even set of records 


In order to fetch the odd records with Id as odd number.

select CITY from STATION as st where st.id % 2 <> 0

% функция уменьшает значение до 0 или 1


означает "не равно". однако в некоторых версиях SQL вы можете писать !=


for even:
select * from tablename  where columname/2 not like '%.%';
for eg:
select sal from emp where sal/2 not like '%.%';
for odd;
select * from tablename where columname/2 like '%.%';
select sal from emp where sal/2 like '%.%';