使用orcale 创建一个与mysql相同的date_sub函数
时间: 2024-02-28 09:52:41 浏览: 181
Oracle 中可以使用 `ADD_MONTHS` 函数和 `TO_DATE` 函数来模拟 MySQL 中的 `DATE_SUB` 函数。具体实现方式可以参考以下代码:
```
CREATE FUNCTION date_sub (dt DATE, INTERVAL INT, UNIT VARCHAR2) RETURN DATE IS
BEGIN
IF UPPER(UNIT) = 'MICROSECOND' THEN
RETURN dt - (INTERVAL / 86400000000);
ELSIF UPPER(UNIT) = 'SECOND' THEN
RETURN dt - (INTERVAL / 86400);
ELSIF UPPER(UNIT) = 'MINUTE' THEN
RETURN dt - (INTERVAL / 1440);
ELSIF UPPER(UNIT) = 'HOUR' THEN
RETURN dt - (INTERVAL / 24);
ELSIF UPPER(UNIT) = 'DAY' THEN
RETURN dt - INTERVAL;
ELSIF UPPER(UNIT) = 'WEEK' THEN
RETURN dt - (INTERVAL * 7);
ELSIF UPPER(UNIT) = 'MONTH' THEN
RETURN ADD_MONTHS(dt, -INTERVAL);
ELSIF UPPER(UNIT) = 'QUARTER' THEN
RETURN ADD_MONTHS(dt, -(INTERVAL * 3));
ELSIF UPPER(UNIT) = 'YEAR' THEN
RETURN ADD_MONTHS(dt, -(INTERVAL * 12));
ELSE
RAISE_APPLICATION_ERROR(-20000, 'Invalid INTERVAL unit: ' || UNIT);
END IF;
END;
/
```
使用方法和 MySQL 中的 `DATE_SUB` 函数类似,例如:
```
SELECT date_sub(SYSDATE, 1, 'DAY') FROM dual;
```
这将返回当前日期减去一天的结果。注意,这里使用的是 Oracle 的 `SYSDATE` 函数来获取当前日期。
阅读全文