返回落在一段时间内的所有行

时间:2011-11-29 10:47:45

标签: sql

我对写sql有疑问。

我有一张带有

的农民桌
YEAR,SEASON,Number of Fields.

和季节看起来像这样

Kharif---- 15june-15Oct   
Rabi---15 oct to 15 Feb   
Summer----15Feb to 15 June 

现在我想编写一个sql,它返回当前年份当前季节以外的所有行。即我们应该根据系统日期获得当前季节。

我正在破解我的大脑,但是却没有。

请帮帮我。

4 个答案:

答案 0 :(得分:2)

我建议你定义一个如上所述的三行的季节表,例如

create table season (
  season_id              int,
  description            varchar(32),
  start_day_of_month     int,
  start_month            int   
  end_day_of_month       int,
  end_month              int   
)

这一年不包括月份和月份指数。

你的farmfields表应该有一个seaon_id列引用这个,并且很可能也有一年列。

根据您的SQL供应商,可以使用不同的日期函数,但应该能够使用来自农民田的年份以及季节的月份和日期来组成开始日期和结束日期。鉴于此,您可以确定当前日期是否属于给定的农场区域条目的开始和结束日期。

答案 1 :(得分:1)

您的表格结构错误,不适合您的需要。

而不是名为SEASON的单个字段,有两个字段:SEASON_START和SEASON_END都是Date类型,那么查询就像这样简单:

Select * From [farmerfields] Where GetDate() Between SEASON_START And SEASON_END

如果名称是您当前SEASON字段的一部分,请添加第三个字段SEASON_NAME,新结构将为:

SEASON_NAME | SEASON_START | SEASON_END
---------------------------------------
Kharif      | 15june       | 15Oct   
Rabi        | 15 oct       | 15 Feb
...

编辑:在上面的示例代码中,我假设您有SQL Server数据库 - 如果是不同的数据库,您将拥有不同的功能来获取当前系统日期。

答案 2 :(得分:0)

对于日期差异,您可以使用sql函数DATEDIFF

SELECT * FROM table WHERE `date` BETWEEN '2011-10-20' AND '2011-1-1' AND DATEDIFF(`date`, '2011-10-20') % 10 = 0

答案 3 :(得分:0)

我建议你定义一个如上所述的三行的季节表,例如

create table season (
  season_id              int,
  description            varchar(32),
  start_day_of_month     int,
  start_month            int   
  end_day_of_month       int,
  end_month              int   
)

这里的年份不包括月份和月份指数。

然后,您的farmfields表应该有一个season_id列引用此列,并且很可能也有一年列。

根据您的SQL供应商,可以使用不同的日期函数,但应该能够使用来自农民田的年份以及季节的月份和日期来组成开始日期和结束日期。鉴于此,您可以确定当前日期是否属于给定的农场区域条目的开始和结束日期。