2011-03-17 16 views
8

¿Cómo voy a lograr lo siguiente:Seleccione el resultado de una comparación en la instrucción SQL

select (1 < 2) as One, (1 > 2) as Two 

para que produciría los siguientes resultados:

One  Two 
----------------- 
True False 

estoy usando SQL Server, pero una el ejemplo del DBMS cruzado sería bueno.

+0

Muchas personas respondieron correctamente, solo quiero agregar que en motores no dañados por el daño cerebral como MySQL y PostgreSQL escribirías exactamente como lo has hecho. Oracle y MSSQL aparentemente tienen el tipo booleano pero solo internamente (como resultado de los operadores de comparación), pero no como un tipo de datos que se puede devolver desde un 'SELECT'. No tengo idea por qué. – Amadan

+0

@Amadan prueba esto por una razón: no está en la especificación ANSI SQL. Ni siquiera sql-2003 http://savage.net.au/SQL/ – RichardTheKiwi

+0

@Richard ¿Qué es esto? http://savage.net.au/SQL/sql-2003-2.bnf.html#boolean%20type El problema, como yo lo entiendo, es que las personas no pueden ponerse de acuerdo en cuanto a cuál es el resultado de las operaciones lógicas en NULL-extended trinary la lógica debería ser, pero creo que es un argumento de mierda, porque de hecho tendrá el tipo booleano como resultado de las comparaciones, y tendrá NULL allí, y necesita ser manejado de alguna manera, evitando que el resultado sea directamente devuelto es barrido de mierda debajo de la alfombra, en mi opinión. – Amadan

Respuesta

13

Suponiendo que se trata de un servidor SQL, puede usar la instrucción CASE.

select (case when (1 < 2) then 'True' else 'False' end) as one, 
     (case when (1 > 2) then 'True' else 'False' end) as two 
from table 

En el lugar de la condición, puede utilizar cualquier variable o los valores de columna también. Básicamente una expresión.

+1

Con SQL Server ni siquiera necesita la cláusula FROM. –

+0

@Dave - sí, tienes razón. el 'From' se debe usar si la expresión tiene alguna referencia a las columnas de la tabla. –

0

Bueno, en Oracle que podría hacer algo como

SELECT CASE 
     WHEN 1 < 2 THEN 
      'TRUE' 
     ELSE 
      'FALSE' 
     END AS ONE, 
     CASE 
     WHEN 1 > 2 THEN 
      'TRUE' 
     ELSE 
      'FALSE' 
     END AS TWO 
    FROM DUAL; 

Tenga en cuenta que Oracle no tiene un tipo booleano en la base de datos (a diferencia de PL/SQL, que hace tener BOOLEANA de) por lo que la las expresiones de caso devuelven cadenas de caracteres.

Compartir y disfrutar.

0

utilizar una sentencia de caso:

declare @value1 int, @value2 int 
set @value1 = 1 
set @value2 = 2 

select 
case when (@value1 < @value2) then 'True' else 'False' end as One 
case when (@value1 > @value2) then 'False' else 'True' end as Two 
from table 

Dependiendo de su necesidad, que puede codificar en los valores, o se puede hacer algo similar a esto para cuando es posible que desee cambiar los valores. También puede combinar la declaración de caso en una columna o dividirla también para hacer comparaciones de tipo menor o igual.

Cuestiones relacionadas