¿Es posible seleccionar EXISTE directamente como un bit?

Resuelto jcollum asked hace 14 años • 9 respuestas

Me preguntaba si es posible hacer algo como esto (que no funciona):

select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)

Parece que debería ser factible, pero muchas cosas que deberían funcionar en SQL no funcionan;) He visto soluciones para esto (SELECCIONE 1 donde... Existe...) pero parece que debería poder hacerlo. emita el resultado de la función existe como un bit y termine con ello.

jcollum avatar May 04 '10 00:05 jcollum
Aceptado

No, tendrás que utilizar una solución alternativa.

Si debe devolver un bit condicional 0/1, otra forma es:

SELECT CAST(
   CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1 
   ELSE 0 
   END 
AS BIT)

O sin el yeso:

SELECT
   CASE
       WHEN EXISTS( SELECT 1 FROM theTable WHERE theColumn LIKE 'theValue%' )
            THEN 1 
       ELSE 0 
   END
Alex K. avatar May 03 '2010 17:05 Alex K.
SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%'

Cuando lanzas a morder

  • 0 -> 0
  • todo lo demás -> 1
  • Y NULL -> NULL por supuesto, pero no puedes obtener NULL con COUNT(*) sin GROUP BY

bitse asigna directamente a booleantipos de datos .net, incluso si no lo es realmente...

Esto se ve similar pero no da ninguna fila (ni cero) si no hay coincidencias, por lo que no es lo mismo

SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
gbn avatar May 03 '2010 17:05 gbn

Puedes usar IIFyCAST

SELECT CAST(IIF(EXISTS(SELECT * FROM theTable 
                       where theColumn like 'theValue%'), 1, 0) AS BIT)
Jaider avatar Aug 25 '2016 17:08 Jaider