【问题标题】:Timestamp filter in PLSQLPLSQL 中的时间戳过滤器
【发布时间】:2021-10-14 16:58:57
【问题描述】:

假设我有一个表,其中包含用户对电影的评分,例如 IMDB 电影数据库。

ID USER_REVIEW USER_RATING USER_ID
1 blub 10 1
2 blob 9 2
3 blab 7 3

这些表格插入是昨天拍摄的。 id 为 1 和 2 的条目是在 16:00 到 16:10 之间拍摄的。 id 为 3 的第三个条目是在 16:10 到 16:15 之间进行的 我如何找到一个 select 语句来过滤我在 16:00 到 16:10 之间的前两个条目? 或者是否有可能找出昨天插入的确切时间戳?

【问题讨论】:

    标签: sql oracle plsql oracle-sqldeveloper


    【解决方案1】:

    试试 GETDATE() 函数。 这里有一些可以帮助你的东西: https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

    【讨论】:

    • GETDATE() 函数仅适用于 sql server。我正在使用 oracle sql,所以 SYSDATE 可以工作
    【解决方案2】:

    是否可以找到昨天插入的确切时间戳?

    当然,如果表中有时间戳列。


    看起来好像这样的列不存在,添加它的简单选项是

    alter table movies add date_insert date default sysdate;
    

    Oracle 将使用SYSDATE 自动填充该列(除非您明确插入它),这意味着您当前的INSERT 语句保持“原样”,您不必稍作更改。

    然后你会 - 例如 - 选择插入的行 yesterday as

    select *
    from movies
    where trunc(date_insert) = trunc(sysdate - 1)
    

    或者,如您所问,昨天(2021 年 8 月 10 日)16:00 到 16:10 之间插入的行:

    select * 
    from movies
    where date_insert between to_date('10.08.2021 16:00', 'dd.mm.yyyy hh24:mi')
                          and to_date('10.08.2021 16:10', 'dd.mm.yyyy hh24:mi')
    

    【讨论】:

    • 但是如果我使用 select * from (table_name) where trunc(date_insert) = trunc(sysdate - 1),则插入不起作用并且没有任何变化。新列“date_insert”保留为 sysdate
    • 当然。你读过我说的吗?为什么你认为 SELECT 会修改表的内容?它永远不会。 INSERT 会这样做。所以:如果您当前没有这样的时间戳列,则无法检索您感兴趣的数据。您可以添加一个新列(如我所演示的)并更新当前存储在表,但这纯粹是手动工作,您必须知道何时插入这些先前的行。 DEFAULT 列值将生效并对新添加的行有意义。
    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 2015-04-20
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多