Asp*_*ant 0 sql oracle sysdate
我有一个具有EMP_DATE列的表结构,如下所示
ID EMP_DATE
---- -----------
5400 14-FEB-2012
Run Code Online (Sandbox Code Playgroud)
我已将记录插入表中,如下所示
INSERT INTO TEST_DATE VALUES(5400,SYSDATE);
Run Code Online (Sandbox Code Playgroud)
插入记录,而我试图获取那些谁拥有的记录后EMP_DATE
作为SYSDATE其没有给出选择的行.暂时让我们SYSDATE成为'01 -JUL-2012`
SELECT * FROM TEST_DATE WHERE EMP_DATE = SYSDATE;
(OR)
SELECT * FROM TESt_DATE WHERE EMP_DATE = '01-JUL-2012';
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚任何解决方案.任何的意见都将会有帮助 .
主要问题是日期包括小时,分钟和秒,这是您不允许的.如果你想要一天的所有东西,你可以使用该trunc功能,以获得这个:
SELECT * FROM TEST_DATE WHERE trunc(EMP_DATE) = trunc(SYSDATE);
Run Code Online (Sandbox Code Playgroud)
默认情况下trunc,在日期列上操作时会删除日期的时间部分.我通常会建议使用功能索引trunc(emp_date)来优化此查询.就像是:
create index i_test_date on test_date(trunc(emp_date));
Run Code Online (Sandbox Code Playgroud)
我已经建立了一个小小的SQL小提琴来演示这个.
还有一个问题; 虽然Oracle确实支持ANSI日期文字,但您的第二个查询是错误的.始终使用该to_date函数将字符串显式转换为日期.
SELECT * FROM TEST_DATE WHERE EMP_DATE = to_date('01-07-2012','dd-mm-yyyy');
Run Code Online (Sandbox Code Playgroud)
我已经使用了mm 日期时间格式模型,而不是mon因为不能保证JUL7月总是意味着; 它取决于您的NLS参数,您的特定数据库或会话使用的"日期语言".日期时间格式模型是告诉数据库您要将其转换为日期的任何字符串的格式.
如果您对第二个查询的ANSI语法感兴趣,那么:
SELECT * FROM TESt_DATE WHERE trunc(EMP_DATE) = DATE '2012-07-01'
Run Code Online (Sandbox Code Playgroud)
它必须采用这种格式(YYYY-MM-DD)才能工作.