使用年份和月份字段选择记录 - SQL Server

问题描述:

我需要使用给定年份和月份的范围从表中选择记录我正在使用此SQL Server语句,如果我使用不同的年份作为开始年份,那么该语句工作正常,但如果我使用同一年和不同的月份不起作用。使用年份和月份字段选择记录 - SQL Server

SELECT TOP 1000 [Clave Titular Cedula] 
     ,[Clave Cifcod] 
     ,[Clave Anio corte historico] 
     ,[Clave Mes de corte historico] 
     ,[Clave Tipo de tarjeta] 
     ,[ClaveCodigo grupo inf#promocio] 
     ,[Clave Codigo subgrupo inf#prom#] 
     ,[Cant# Compras] 
     ,[Valor Compras] 
    FROM [Prueba].[dbo].[Gasto] 
    where ([Clave Titular Cedula] = '0917947160' and [Clave Cifcod] = '284849' and [ClaveCodigo grupo inf#promocio] = '05') 
and (([Clave Anio corte historico] = '2016' and [Clave Mes de corte historico] >= 02) 
    or ([Clave Anio corte historico] > '2016' and [Clave Anio corte historico] < '2016') 
    or ([Clave Anio corte historico] = '2016' and [Clave Mes de corte historico] <= 09)) 

例如,这将返回事件的月份01而不是月份02的记录作为起始月份。

任何建议将不胜感激。

由于提前,

鲍里斯塔拉

+0

您的最后一项或声明允许所有在2016年的月份少于10个月返还 - 第1个月是其中的一部分。你需要重构你的查询。如果你正在寻找一个范围 - 尝试使用之间的月 – MageeWorld

+0

除了'([Clave Anio corte historico]>'2016'和[Clave Anio corte historico] MageeWorld

您可以使用此,通过排除所有错误的选项。我prefere你结合的年份和月份,如:YYYY-MM

SELECT * FROM表WHERE NOT(FROM_DATE < #RangeEnd或TO_DATE> #RangeStart)

希望帮助

您的查询简化为:

SELECT TOP 1000 
    [Clave Titular Cedula] 
    ,[Clave Cifcod] 
    ,[Clave Anio corte historico] 
    ,[Clave Mes de corte historico] 
    ,[Clave Tipo de tarjeta] 
    ,[ClaveCodigo grupo inf#promocio] 
    ,[Clave Codigo subgrupo inf#prom#] 
    ,[Cant# Compras] 
    ,[Valor Compras] 
FROM 
    [Prueba].[dbo].[Gasto] 
where 
    ([Clave Titular Cedula] = '0917947160') 
    and ([Clave Cifcod] = '284849') 
    and ([ClaveCodigo grupo inf#promocio] = '05') 
    and ([Clave Anio corte historico] = '2016') 
    and ([Clave Mes de corte historico] between 02 and 09)