SELECT * FROM T_TRANS WHERE TIME_START = to_date(' 01-09-2014',' DD-MM-YY');

时间:2014-09-04 10:57:32

标签: oracle toad

Sory,我有疑问?当我执行一些字段内容时,为什么不显示。 请帮我修理一下。谢谢你

SELECT * FROM T_TRANS WHERE TIME_START = to_date('01-09-2014', 'DD-MM-YY');

3 个答案:

答案 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;?