我想用当前时间得到日期.
使用trunc(sysdate)给了我们类似的东西2017-06-16 00:00:00
但是,我也想要当前时间:
2017-06-16 10:00:00
2017-06-16 11:00:00
Run Code Online (Sandbox Code Playgroud)
等等.
我希望它是一个日期(而不是char),因为我需要它与日期列进行比较.
date_column <= day_with_hour
Run Code Online (Sandbox Code Playgroud) 我有一个具有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)
我无法弄清楚任何解决方案.任何的意见都将会有帮助 .
在可能的情况下,我更喜欢使用跨平台可用的功能.所以为了获得当前时间,我尝试了:
CAST(SYSDATE AS CHAR(19))
Run Code Online (Sandbox Code Playgroud)
......但只是'07 -JUL-14'.如果我使用Oracle的本机函数:
TO_CHAR(SYSDATE, 'YYYY-MM-DD hh:mi:ss')
Run Code Online (Sandbox Code Playgroud)
......我得到了我期望的所有细节. 表示值返回的doc页面SYSDATE是日期/时间.那么为什么不CAST(SYSDATE AS CHAR)返回日期/时间值呢?
我很想回答"Oracle,默认情况下,在将它们转换为CHAR或VARCHAR时会截断日期",但我的Oracle经验有限,所以如果专家能给出更好的答案我会留下问题.例如,有什么方法可以改变这种行为吗?是否有一些历史原因导致Oracle决定以CAST这种方式销毁信息?
数据库:Oracle
简化版:
表T有一列:D(DATE类型)
现在桌子是空的.
INSERT INTO T
(D) VALUES (sysdate);
Run Code Online (Sandbox Code Playgroud)
现在该表有一行包含22-AUG-14.
为什么以下WHERE子句为false?
SELECT * FROM T
WHERE D = sysdate;
Run Code Online (Sandbox Code Playgroud)
=> 0行
以下查询有效:
SELECT * FROM T
WHERE TO_CHAR(D, 'DD/MM/YYYY') = TO_CHAR(sysdate, 'DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)
=> 1行
我认为与时间相关的"精度损失"(类似于double和int),但为什么可能呢?因为这两种类型都是DATE.
我目前正在使用其中一列来提取时间的每分钟,但是,由于该分钟未插入任何数据,因此会跳过几分钟。
输出低于预期。
12-19-2017 02:23:00
12-19-2017 02:24:00
12-19-2017 02:25:00
12-19-2017 02:26:00
12-19-2017 02:27:00
12-19-2017 02:28:00
12-19-2017 02:29:00
12-19-2017 02:30:00
12-19-2017 02:31:00
12-19-2017 02:32:00
12-19-2017 02:33:00
12-19-2017 02:34:00
Run Code Online (Sandbox Code Playgroud)
我得到什么。(当前时间为13:11
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
12-19-2017 13:11:00
Run Code Online (Sandbox Code Playgroud)
询问
SELECT TRUNC(SYSDATE,'MI') AS TIME_STAMP From Table where SYSDATE >= sysdate - 1;
Run Code Online (Sandbox Code Playgroud) 我在一个简单的查询中使用Current_Date函数时遇到了一些问题,但我无法弄清楚原因.我正在使用Oracle SQL Developer 3.2在Oracle 12c环境中工作.
我的原始查询看起来像这样:
select * from Inventory where Placement_End_Dt >= Current_date
Run Code Online (Sandbox Code Playgroud)
以上工作正常,但它没有获取Placement_End_Dt今天(5月14日18日)的记录
我尝试按如下方式简化查询,但这也不会返回任何内容
select * from Inventory where Placement_End_Dt = Current_date
Run Code Online (Sandbox Code Playgroud)
但是,当我按如下方式应用日期格式时,它可以工作:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') = to_char(Current_date, 'DD-MM-YYYY')
Run Code Online (Sandbox Code Playgroud)
然后我尝试对此进行扩展以恢复到我的原始查询,以选择具有从今天开始的结束日期的所有记录:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') => to_char(Current_date, 'DD-MM-YYYY')
Run Code Online (Sandbox Code Playgroud)
这非常失败,因为它选择了Placement_End_Dt过去,现在和未来的记录!
Placement_End_Dt列定义为Oracle DATE数据类型
希望得到一些关于我如何使这个查询工作的输入.