在 SQL 的触发器中将日期设置为该周的星期一

Posted

技术标签:

【中文标题】在 SQL 的触发器中将日期设置为该周的星期一【英文标题】:Setting a date to the Monday of that week in a trigger in SQL 【发布时间】:2012-02-19 19:02:13 【问题描述】:

您好,我正在使用连接到 oracle 服务器的 sqldeveloper。我试图在触发器中将日期更改为该周的星期一,但它显示Warning: execution completed with warning,任何人都可以在这里看到我做错了什么吗?

CREATE OR REPLACE TRIGGER trg_week_menu
BEFORE INSERT OR UPDATE OF week_start ON week_menu FOR EACH ROW
BEGIN
  IF DATEPART(dw, :NEW.week_start) != 1 THEN
    SELECT DATEADD(ww, DATEDIFF(ww, 0, :NEW.week_start), 0)
    INTO :NEW.week_start
    FROM sys.dual;
  END IF;
END;

提前致谢! =)

【问题讨论】:

【参考方案1】:

这可能是因为 datediffdateadd 是 SQL-Server 函数,而不是 Oracle。

据我了解,您尝试这样做应该可以:

CREATE OR REPLACE TRIGGER trg_week_menu
BEFORE INSERT OR UPDATE OF week_start ON week_menu FOR EACH ROW
BEGIN
   IF to_char(:new.week_start,'d') <> 1 THEN
      :new.week_start := next_day( :new.week_start - 7
                                 , 'MONDAY' );
   END IF;
END;
/

但万一我不明白你想做什么。 Oracle 中有一个 number of date functions,您可能应该知道。

【讨论】:

以上是关于在 SQL 的触发器中将日期设置为该周的星期一的主要内容,如果未能解决你的问题,请参考以下文章

如果日期是月初,则获取当前周的所有日期返回不正确

给定周数,返回 T-SQL 中一周的第一天

在 SQL redshift 中返回特定周的第一个日期(星期日)

从T-SQL中的周数中获取日期

Netezza 中 NEXTDAY 的 Impala SQL 等效函数是啥?

获取星期一和星期日等。对于任何日期作为 Unix 中的参数一周