2011-11-11 13 views
18

que estaba trabajando en una consulta de hoy, que me obligó a usar lo siguiente para encontrar todos los valores de número de identificación extrañapar o impar ID valores

(ID % 2) <> 0 

¿Puede alguien decirme qué está haciendo esto? Funcionó, lo cual es genial, pero me gustaría saber por qué.

+0

(ID% 2) = 0 para seleccionar números pares – anandharshan

Respuesta

31

ID % 2 está comprobando cuál es el resto si divide ID por 2. Si divide un número par por 2 siempre tendrá un resto de 0. Cualquier otro número (impar) dará como resultado un valor distinto de cero. Que es lo que está buscando.

+0

Impresionante. Esto es exactamente lo que necesitaba. ¡Gracias! – Phoenix

2

Toma la ID, dividiéndola por 2 y comprobando si el resto no es cero; es decir, es una identificación impar.

7

Para encontrar el número aún debemos utilizar

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

en Oracle,

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

dividendo divisor%

dividendo es la expresión numérica para dividir. Dividendo debe ser cualquier expresión de tipo de datos entero en el servidor sql.

Divisor es la expresión numérica para dividir el dividendo. El divisor debe ser una expresión del tipo de datos entero excepto en el servidor sql.

SELECT 15 % 2 

Output 
1 

Dividendo = 15

Divisor = 2

Digamos que quería consultar

consultar una lista de nombres de ciudades de la estación con sólo números de identificación de pares.

estructura Esquema para ESTACIÓN:

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 

función% reduce el valor de 0 o 1

+0

Esta pregunta está buscando * una explicación *, no simplemente para ejemplos de código adicionales. Su respuesta no proporciona información para el interrogador y puede eliminarse. Por favor, [editar] para * explicar * cómo la comparación selecciona números impares. –

-1

<> significa no iguales. Sin embargo, en algunas versiones de SQL, puede escribir! =

0
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 '%.%'; 
+1

Esto no responde la pregunta, e incluso si lo hizo, no hay contexto o explicación del código. Las respuestas de solo código generalmente no son útiles. – WillardSolutions

0

Como continuación Doc especifique

dividendo divisor%

devuelve el resto de un número dividido por otro.

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

Para el Ejemplo

13% 2 retorno 1

parte siguiente es <> que denota no es igual.

para ello lo que su declaración es decir El resto de ID cuando se divide por 2 no es igual a 0

Tenga cuidado porque esto no va a funcionar en la base de datos Oracle. La misma expresión será como a continuación.

MOD(ID, 2) <> 0 
Cuestiones relacionadas