Поиск четных или нечетных значений ID
Я работал над запросом сегодня, который потребовал от меня использовать следующее, чтобы найти все значения идентификатора нечетного числа
(ID % 2) <> 0
может кто-нибудь сказать мне, что это делаешь? Это сработало, и это здорово, но я хотел бы знать, почему.
9 ответов
ID % 2
проверяет, что такое остаток, если вы разделите ID на 2. Если вы делите число на 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
дивиденда % делитель
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
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 '%.%';