在 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】:这可能是因为 datediff
和 dateadd
是 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 的触发器中将日期设置为该周的星期一的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL redshift 中返回特定周的第一个日期(星期日)