0

我有一个数据库,我们称之为“mydb”。数据库“mydb”,有一个表“mytable”。在表“mytable”中,三个字段:text(char 类型)、start_date(DATE 类型)和end_date(DATE 类型)。

我想选择从 start_date 到 end_date 的特定日期范围。但我希望采样只有几天和几个月,不包括年份!如何才能做到这一点?

对如何在以下之间进行选择的问题特别感兴趣:

23.12 - 01.01

如果我输入 01/01/2013,这个日期必须在一个范围内!

我使用 PostgreSQL。

4

2 回答 2

0

您可以使用date_part()提取日期的一部分。

SELECT foo FROM bar WHERE
(date_part('month', foo)=12 AND date_part('day', foo)>=23)
OR
(date_part('month', foo)=1 AND date_part('day', foo)=1)

http://sqlfiddle.com/#!12/7123d/1

于 2013-05-18T09:58:49.743 回答
-1

检查这个

create table mytable(inputDate text, start_date DATE,end_date DATE);

insert into mytable values('2013-01-01',to_date('2013-01-01', 'YYYY-MM-DD'),to_date('2013-12-23', 'YYYY-MM-DD'));

insert into mytable values('2014-01-01',to_date('2013-01-01', 'YYYY-MM-DD'),to_date('2013-12-23', 'YYYY-MM-DD'));

insert into mytable values('2013-12-24',to_date('2013-01-01', 'YYYY-MM-DD'),to_date('2013-12-23', 'YYYY-MM-DD'));

insert into mytable values('2014-12-24',to_date('2013-01-01', 'YYYY-MM-DD'),to_date('2013-12-23', 'YYYY-MM-DD'));

查询以检查忽略年份的范围

select * from mytable
where 
( 
  date_part('month',to_date(inputDate,'YYYY-MM-DD')) >=date_part('month',start_date)
  AND
  date_part('day',to_date(inputDate,'YYYY-MM-DD')) >=date_part('day',start_date)
 )

AND
 (
   date_part('month',to_date(inputDate,'YYYY-MM-DD')) <=date_part('month',end_date)
  AND
  date_part('day',to_date(inputDate,'YYYY-MM-DD')) <=date_part('day',end_date)
  )

SQL 小提琴演示

于 2013-05-18T10:52:06.420 回答