2011-11-29 47 views
1

我在编写sql时存在疑问。返回一段时间内的所有行

我有一个farmerfields表

YEAR,SEASON,Number of Fields. 

和季节看起来像这样

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

现在我想要写sql返回所有行排除在今年的赛季。即我们应该根据系统日期得到当前的季节。

我正在破解我的大脑来得到这个,但不能。

请帮帮我。

+2

什么RDBMS?日期功能不同。我也对你的结构感到困惑。你是说季节专栏包含像'Kharif ---- 15june-15Oct'这样的字符串吗?如果是这样,你应该首先阅读标准化。 –

+0

最好的马丁。季节包含字符串。有季节表,其中包含开始月份,结束月份,季节名称 – Siva

回答

1

你的表结构是错误的,不适合你的需要。

而是单场叫赛季,有两个领域:SEASON_START和SEASON_END两型日期则查询是简单:

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

如果名称是您当前赛季场的一部分,加上第三现场SEASON_NAME以及和新的结构将是:

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

编辑:我在上面的示例代码,我以为你有SQL Server数据库 - 在不同的数据库的情况下,你有不同的功能,以获得当前系统日期。

+0

其实我有一个季节表,我从中获取季节并将其存储在here.seasons表中包含季节名称,开始日期,结束日期 – Siva

+0

好,所以使用SEASON_START和SEASON_END之间的Where GetDate(),它应该工作得很好。 –

0

对于日期的差异,你可以使用SQL函数DATEDIFF

SELECT * FROM table WHERE `date` BETWEEN '2011-10-20' AND '2011-1-1' AND DATEDIFF(`date`, '2011-10-20') % 10 = 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 
) 

今年不包括在这里只是月份和月份的指数。然后

你farmerfields表应该有一个seaon_id列对于这一点,并极有可能一年也列。

根据您的SQL供应商的不同日期的功能将可用,但应该应该能够从赛季撰写使用一年farmerfields天的日开始和结束日期,月份和。鉴于此,您可以确定当前日期是否在给定的农民田间条目的开始和结束日期内。

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 
) 

今年不包括在这里只是月份和月份的指数。然后

你farmerfields表应该有一个season_id列对于这一点,并极有可能一年也列。

根据您的SQL供应商的不同日期的功能将可用,但应该应该能够从赛季撰写使用一年farmerfields天的日开始和结束日期,月份和。鉴于此,您可以确定当前日期是否在给定的农民田间条目的开始和结束日期内。