Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL当前日期_Sql_Oracle_Sysdate - Fatal编程技术网

Oracle SQL当前日期

Oracle SQL当前日期,sql,oracle,sysdate,Sql,Oracle,Sysdate,在一个简单的查询中使用Current_Date函数时,我遇到了一些问题,我一直无法找出原因。我正在使用Oracle SQL Developer 3.2在Oracle 12c环境中工作 我的原始查询如下所示: select * from Inventory where Placement_End_Dt >= Current_date 上述方法效果良好,但在今天(5月14日至18日)的位置,它不会拾取记录 我试图将查询简化如下,但这也不会返回任何结果 select * from Invent

在一个简单的查询中使用Current_Date函数时,我遇到了一些问题,我一直无法找出原因。我正在使用Oracle SQL Developer 3.2在Oracle 12c环境中工作

我的原始查询如下所示:

select * from Inventory where Placement_End_Dt >= Current_date
上述方法效果良好,但在今天(5月14日至18日)的位置,它不会拾取记录

我试图将查询简化如下,但这也不会返回任何结果

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 * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') => to_char(Current_date, 'DD-MM-YYYY')
这失败得惊人,因为它选择了位置为过去、现在和未来的记录

Placement_End_Dt列定义为Oracle日期数据类型


如果您能提供一些关于如何使此查询工作的信息,我将不胜感激。

当使用
进行字符比较时,您正在比较字符串

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

当使用
对字符进行比较时,您正在比较字符串

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。

尝试此操作,它将返回当前日期和未来日期的行

select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);

尝试此操作,它将返回当前日期和未来日期的行

select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);

我建议使用这个查询

select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);

Oracle日期列在默认情况下也存储时间戳,因此除非记录一直到第二个都相同,否则它们不会匹配。当您对日期列使用trunc()时,它会截断时间戳,只留下日期。

我建议使用此查询

select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);

Oracle日期列在默认情况下也存储时间戳,因此除非记录一直到第二个都相同,否则它们不会匹配。在日期列上使用trunc()时,它会截断时间戳,只留下日期。

我认为可以简化为
,其中placement\u end\u dt>=trunc(sysdate)
我认为可以简化为
其中placement\u end\u dt>=trunc(sysdate)