在给定之间获取SQL范围

时间:2012-01-13 20:43:53

标签: sql date

我想知道是否有可能(在没有实际解析给定字符串的情况下)获得当您拥有类似

之类的SQL语句时指定的实际范围(以天,分或秒为单位)
[select 'x'
from dual
where date between to_date('20111113152049')
and to_date('20120113152049')]

我正在处理一个查询,其中我以

的形式给出了一个字符串
"between to_date(A) and to_date(B)" 

并希望在几天内获得该值以与我们让用户设置的政策进行比较,以便他们不会输入比一周更长的日期范围。

1 个答案:

答案 0 :(得分:1)

假设您正在寻找理论答案(即:不要将其投入生产),这可能有效:

Prerequistes: 有三个表:days_seq(day_seq),month_seq(mth_seq)和year_seq(yr_seq) 天有数字1 ... 31,月1 ... 12,2011年......?

使用以下查询(我使用访问权限,因为我没有适当的RDBMS可用,请记住,MS-ACCESS / JET在使用Dateserial函数时是宽容的,也就是说,它不会在你问2012年2月30日的日期序列)

SELECT Max(DateSerial(
    [year_seq]![yr_seq]
   ,[month_seq]![mth_seq]
   , [days_seq]![day_seq])) 
   -
   Min(DateSerial(
     [year_seq]![yr_seq]
    ,[month_seq]![mth_seq]
    ,[days_seq]![day_seq])) AS days
FROM days_seq, month_seq, year_seq
WHERE DateSerial(
        [year_seq]![yr_seq]
       ,[month_seq]![mth_seq]
       ,[days_seq]![day_seq])
BETWEEN #2012-02-1# AND #2012-02-28#

该查询基本上产生了一个由三个表组成的carthesian产品,它可以生成几年中所有可能的天数,一年中可以生成多年的月数。

加成: 正如X-Zero建议的那样,你可以在课程中生成一个永久的日历表。

表日历([日期])

  INSERT INTO calendar
    SELECT DISTINCT DateSerial(
        [year_seq]![yr_seq]
       ,[month_seq]![mth_seq]
       , [days_seq]![day_seq])) 
    FROM days_seq, month_seq, year_seq

你仍然需要明智地选择你的开始年份和结束年份。根据Maya将于2012年12月21日的结束日期。