ejemplos - declaración de caso en la cláusula where-SQL Server
not exists sql server (3)
Estoy tratando de agregar un caso o una declaración en la cláusula where de mi consulta SQL.
Tengo una tabla de tiempos de viaje con una fecha de inicio y finalización, y un campo booleano para cada día para indicar dónde se realiza el viaje ese día. Esto es lo que tengo hasta ahora, pero recibo errores de sintaxis incorrectos:
declare @date datetime
set @Date = ''05/04/2012''
declare @day nvarchar(50)
set @day = ''Monday''
Select * From Times
WHERE (StartDate <= @Date) AND (EndDate >= @Date)
CASE WHEN @day = ''Monday'' THEN
AND (Monday = 1)
WHEN @day = ''Tuesday'' THEN
AND (Tuesday = 1)
ELSE
AND (Wednesday = 1)
END
No necesita un case
en la declaración where
, solo use paréntesis y or
:
Select * From Times
WHERE StartDate <= @Date AND EndDate >= @Date
AND (
(@day = ''Monday'' AND Monday = 1)
OR (@day = ''Tuesday'' AND Tuesday = 1)
OR Wednesday = 1
)
Además, su sintaxis es incorrecta para un caso. No agrega cosas a la cadena, sino que devuelve un solo valor. Usted querría algo como esto, si en realidad usara una declaración de case
(que no debería):
Select * From Times
WHERE (StartDate <= @Date) AND (EndDate >= @Date)
AND 1 = CASE WHEN @day = ''Monday'' THEN Monday
WHEN @day = ''Tuesday'' THEN Tuesday
ELSE Wednesday
END
Y solo por un umph adicional, puede usar el operador between
para su fecha:
where @Date between StartDate and EndDate
Haciendo su consulta final:
select
*
from
Times
where
@Date between StartDate and EndDate
and (
(@day = ''Monday'' and Monday = 1)
or (@day = ''Tuesday'' and Tuesday = 1)
or Wednesday = 1
)
Una sentencia CASE
es una expresión, al igual que una comparación booleana. Eso significa que el ''AND'' debe ir antes de la declaración ''CASE'', no dentro de él:
Select * From Times
WHERE (StartDate <= @Date) AND (EndDate >= @Date)
AND -- Added the "AND" here
CASE WHEN @day = ''Monday'' THEN (Monday = 1) -- Removed "AND"
WHEN @day = ''Tuesday'' THEN (Tuesday = 1) -- Removed "AND"
ELSE AND (Wednesday = 1)
END
simplemente haga la select
:
Select * From Times
WHERE (StartDate <= @Date) AND (EndDate >= @Date) AND
((@day = ''Monday'' AND (Monday = 1))
OR (@day = ''Tuesday'' AND (Tuesday = 1))
OR (Wednesday = 1))