not ejemplos sql sql-server

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))