【发布时间】:2015-06-16 00:33:13
【问题描述】:
我有一个结构表:
+---------+--------------+-----------------+--- ------------+--------+------+ | week_no | long_week_no | week_start_date |周末结束日期 |月 |年份 | +---------+-------------+------+------ ---------+--------+------+ | 1 | 1A | 2015 年 1 月 1 日 | 2015 年 3 月 1 日 |一月 | 2015 | | 1 | 1B | 2015 年 4 月 1 日 | 2015 年 10 月 1 日 |一月 | 2015 | | 2 | 2 | 2015 年 11 月 1 日 | 17/01/2015 |一月 | 2015 | | 3 | 3 | 18/01/2015 | 24/01/2015 |一月 | 2015 | | .. | .. | .. | .. | .. | .. | | 51 | 51 | 2014 年 12 月 14 日 | 2015 年 12 月 20 日 |十二月 | 2014 | +---------+-------------+------+------ ---------+-------+------+
当我运行以下语句时:
SELECT *
FROM loy_period
WHERE To_date('15/04/2015', 'DD/MM/YYYY') BETWEEN
To_date(week_start_date, 'DD/MM/YYYY') AND
To_date(week_end_date, 'DD/MM/YYYY');
和
SELECT *
FROM loy_period
WHERE To_date('15/04/2015', 'DD/MM/YYYY') BETWEEN
week_start_date AND
week_end_date;
它返回以下内容:
+---------+--------------+-----------------+--- ------------+--------+------+ | week_no | long_week_no | week_start_date |周末结束日期 |月 |年份 | +---------+-------------+------+------ ---------+--------+------+ | 51 | 51 | 2014 年 12 月 14 日 | 2015 年 12 月 20 日 |十二月 | 2014 | | 1 | 1A | 2015 年 1 月 1 日 | 2015 年 3 月 1 日 |一月 | 2015 | +---------+-------------+------+------ ---------+-------+------+
当我使用任何日期运行它时,它会返回正确的期间除了 week_no 51 记录!
我很困惑为什么会这样。两列week_start_date 和week_end_date 的类型为date。
Fiddle 按预期工作。
【问题讨论】:
-
如果它们已经是
date类型,你到底为什么要对它们调用To_Date? -
永远不要在 DATE 列上使用 TO_DATE。它会将其隐式转换为字符串,然后使用特定于语言环境的 NLS 格式返回日期。
-
你能把你的样本数据和一个健全的查询版本放入sqlfiddle吗?
-
您确定第 51 行中的年份正确吗?
-
您需要处理那个小提琴,直到 a) 显示出您正在寻求帮助的问题,或者 b) 您自己发现了问题。
标签: sql oracle oracle11g date-arithmetic to-date