我想知道是否有可能(在没有实际解析给定字符串的情况下)获得当您拥有类似
之类的SQL语句时指定的实际范围(以天,分或秒为单位)[select 'x'
from dual
where date between to_date('20111113152049')
and to_date('20120113152049')]
我正在处理一个查询,其中我以
的形式给出了一个字符串"between to_date(A) and to_date(B)"
并希望在几天内获得该值以与我们让用户设置的政策进行比较,以便他们不会输入比一周更长的日期范围。
答案 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日的结束日期。