甲骨文 SQL Current_Date
Oracle SQL Current_Date
我在简单查询中使用 Current_Date 函数时遇到了一些问题,我一直无法弄清楚原因。我在使用 Oracle SQL Developer 3.2.
的 Oracle 12c 环境中工作
我原来的查询是这样的:
select * from Inventory where Placement_End_Dt >= Current_date
以上工作正常,除了它不获取今天(18 年 5 月 14 日)Placement_End_Dt 的记录
我试图按如下方式简化查询,但这也returns没什么
select * from Inventory where Placement_End_Dt = Current_date
然而,当我按如下方式应用日期格式时,它起作用了:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') = to_char(Current_date, 'DD-MM-YYYY')
然后我尝试对此进行扩展以恢复到 select 结束日期从今天开始的所有记录的原始查询:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') => to_char(Current_date, 'DD-MM-YYYY')
这非常失败,因为它 selects 记录了 Placement_End_Dt 过去、现在和未来!
Placement_End_Dt 列定义为 Oracle DATE 数据类型
希望能就如何使此查询正常工作提供一些意见。
当使用 to_char
时,您正在比较字符串。
to_char(date '2000-01-20', 'DD-MM-YYYY') > to_char(date '2018-05-14', 'DD-MM-YYYY')
因为“20-01-2000”大于“14-05-2018”,因为字符串中的第一个字母:“2”>“1”。
而 CURRENT_DATE
几乎从未使用过,因为它使用的是您计算机的时间,而不是数据库时间,因此您可以轻松地休息几个小时。请改用 SYSDATE
。
试试这个,它会 return 现在和未来几天的行。
select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);
我建议使用此查询
select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);
默认情况下,Oracle 日期列还存储时间戳,因此除非记录精确到秒都相同,否则它们不会匹配。当您在日期列上使用 trunc() 时,它会截断时间戳并仅保留日期。
我在简单查询中使用 Current_Date 函数时遇到了一些问题,我一直无法弄清楚原因。我在使用 Oracle SQL Developer 3.2.
的 Oracle 12c 环境中工作我原来的查询是这样的:
select * from Inventory where Placement_End_Dt >= Current_date
以上工作正常,除了它不获取今天(18 年 5 月 14 日)Placement_End_Dt 的记录
我试图按如下方式简化查询,但这也returns没什么
select * from Inventory where Placement_End_Dt = Current_date
然而,当我按如下方式应用日期格式时,它起作用了:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') = to_char(Current_date, 'DD-MM-YYYY')
然后我尝试对此进行扩展以恢复到 select 结束日期从今天开始的所有记录的原始查询:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') => to_char(Current_date, 'DD-MM-YYYY')
这非常失败,因为它 selects 记录了 Placement_End_Dt 过去、现在和未来!
Placement_End_Dt 列定义为 Oracle DATE 数据类型
希望能就如何使此查询正常工作提供一些意见。
当使用 to_char
时,您正在比较字符串。
to_char(date '2000-01-20', 'DD-MM-YYYY') > to_char(date '2018-05-14', 'DD-MM-YYYY')
因为“20-01-2000”大于“14-05-2018”,因为字符串中的第一个字母:“2”>“1”。
而 CURRENT_DATE
几乎从未使用过,因为它使用的是您计算机的时间,而不是数据库时间,因此您可以轻松地休息几个小时。请改用 SYSDATE
。
试试这个,它会 return 现在和未来几天的行。
select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);
我建议使用此查询
select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);
默认情况下,Oracle 日期列还存储时间戳,因此除非记录精确到秒都相同,否则它们不会匹配。当您在日期列上使用 trunc() 时,它会截断时间戳并仅保留日期。