Oracle本周第一天本月第一天

本周第一天本月第一天

DECLARE
  V_DATE_DAY    VARCHAR2(50);
  V_WEEK_BEGIN  VARCHAR2(30);
  V_WEEK_END    VARCHAR2(30);
  V_MONTH_BEGIN VARCHAR2(30);
  V_MONTH_END   VARCHAR2(30);
BEGIN
  V_DATE_DAY := '2013-10-11';
  SELECT TRUNC(TO_DATE(V_DATE_DAY, 'YYYY-MM-DD'), 'D') + 1
    INTO V_WEEK_BEGIN
    FROM DUAL;
  SELECT TRUNC(TO_DATE(V_DATE_DAY, 'YYYY-MM-DD'), 'D') + 7
    INTO V_WEEK_END
    FROM DUAL;
  SELECT TRUNC(TO_DATE(V_DATE_DAY, 'yyyy-mm-dd'), 'mm')
    INTO V_MONTH_BEGIN
    FROM DUAL;
  SELECT TRUNC((LAST_DAY) (TO_DATE(V_DATE_DAY, 'yyyy-mm-dd')))
    INTO V_MONTH_END
    FROM DUAL;

  DBMS_OUTPUT.PUT_LINE('BEGIN : ' || V_WEEK_BEGIN);
  DBMS_OUTPUT.PUT_LINE('END : ' || V_WEEK_END);
  DBMS_OUTPUT.PUT_LINE('BEGIN : ' || V_MONTH_BEGIN);
  DBMS_OUTPUT.PUT_LINE('END : ' || V_MONTH_END);
END;

在存储过程使用参数时候,通过上语句插入数据时候V_WEEK_BEGIN实际值为:'07-10月-13',然后转化时候出现错误:ORA-01861: 文字与格式字符串不匹配

修改如下,进行标准时间格式转换。

SELECT TO_CHAR(TRUNC(TO_DATE(V_DATE_DAY,'yyyy-mm-dd'),'d') + 1,'yyyy-mm-dd') INTO V_WEEK_BEGIN FROM DUAL;
SELECT TO_CHAR(TRUNC(TO_DATE(V_DATE_DAY,'yyyy-mm-dd'),'d') + 7,'yyyy-mm-dd') INTO V_WEEK_END FROM DUAL;
posted @ 2013-10-12 17:43  KK508  阅读(860)  评论(0)    收藏  举报