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

时间:2016-09-23 22:21:28

标签: sql 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个月开始作为开始月。

任何建议都将非常感谢。

提前致谢,

鲍里斯塔拉

2 个答案:

答案 0 :(得分:0)

您可以通过排除所有错误选项来使用它。我更喜欢你把年份和月份结合起来:yyyy-mm

SELECT * FROM tables WHERE NOT (From_date < #RangeEnd OR To_date > #RangeStart)

答案 1 :(得分:0)

您的查询简化为:

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 )