Sory,我有疑问?当我执行一些字段内容时,为什么不显示。 请帮我修理一下。谢谢你
SELECT * FROM T_TRANS WHERE TIME_START = to_date('01-09-2014', 'DD-MM-YY');
答案 0 :(得分:2)
Oracle使用日期格式掩码对你有点宽容,但你应该使用YYYY来使它更清晰。但是你仍然在那个日期的午夜提供一个单一的时间点:
select to_char(to_date('01-09-2014', 'DD-MM-YY'), 'YYYY-MM-DD HH24:MI:SS') as two_digit,
to_char(to_date('01-09-2014', 'DD-MM-YYYY'), 'YYYY-MM-DD HH24:MI:SS') as four_digit
from dual;
TWO_DIGIT FOUR_DIGIT
------------------- -------------------
2014-09-01 00:00:00 2014-09-01 00:00:00
考虑到列的名称,假设您有其他时间是合理的,并且除了午夜之外,您的查询将不匹配任何内容。要查找当天的所有记录,您需要提供范围:
SELECT * FROM T_TRANS
WHERE TIME_START >= to_date('01-09-2014', 'DD-MM-YYYY');
AND TIME_START < to_date('02-09-2014', 'DD-MM-YYYY');
...虽然我更喜欢这种类型的ANSI日期表示法:
WHERE TIME_START >= DATE '2014-09-01'
AND TIME_START < DATE '2014-09-02'
你可以在同一天指定23:59:59,但是当你使用时间戳字段而不是日期字段时,这会巧妙地破坏。
您也可以截断表中的值(如@San在评论中所说),或转换为字符串进行比较(如@yammy在答案中所示),但其中任何一个都会阻止{正在使用{1}}列,影响性能。
答案 1 :(得分:0)
阅读Alex Poole建议后,你应该尝试:
SELECT * FROM T_TRANS WHERE to_char(TIME_START, 'DD-MM-YYYY') = '01-09-2014';
答案 2 :(得分:-1)
格式掩码不应该是&#34; DD-MM-YYYY&#34;?