[英]How convert varchar with quarter date to date format?
我有 varchar2 (7 BYTE) PERIOD列,其中年份和季度数的格式如下:
2017-03
我需要将其转换为日期格式,但我试试这个:
SELECT TO_CHAR(PERIOD, 'YYYY-MM') FROM SCHEM_NAME.TABLE_NAME
我得到错误:
ORA-01722: 无效号码 01722. 00000 - “无效号码” *原因:指定的号码无效。 *行动:指定一个有效的数字。
我知道指定的数字无效,但我不明白我需要尝试的格式。
同样在我将尝试从今天的日期起超过五年的那个季度从表中删除所有数据之后。
你能解释一下什么是最合适或最好的方法吗?
我想使用 DROP PARTITION 类似的东西:
ALTER TABLE SCHEM_NAME.TABLE_NAME DROP PARTITION
更新:
使用这个:
SELECT TO_DATE(MAX(PERIOD), 'YYYY-MM') - interval '5' year
FROM SCHEM_NAME.TABLE_NAME
我得到了我需要放弃的日期。 例如:
01-MAR-17
我需要删除早于该日期的所有内容。 最合适的方法是什么?
您想将VARCHAR
转换为DATE
数据类型,那么为什么要使用to_char()
function 进行转换?! to_char()
将DATE
的日期时间或间隔值转换为VARCHAR2
数据类型的值。 您应该使用to_date()
function。 to_date
将CHAR
、 VARCHAR2
、 NCHAR
或NVARCHAR2
数据类型的 char 转换为DATE
数据类型的值:
select to_date(period, 'YYYY-MM') from t1;
在这里试试: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=12753f2f59fb5ce4812fa0af319c1deb
Select:
如所问,您的PERIOD列在 varchar2 中包含一年的季度。
SELECT * FROM SCHEM_NAME.TABLE_NAME
WHERE LAST_DAY(ADD_MONTHS(TO_DATE(SUBSTR(PERIOD, 1, Instr(PERIOD, '-', -1, 1) -1)
|| '-' ||
LPAD(TO_NUMBER(SUBSTR(PERIOD, Instr(PERIOD, '-', -1, 1) +1))*3, 2, 0), 'YYYY-MM'), (5*12))) > SYSDATE;
删除:
DELETE SCHEM_NAME.TABLE_NAME
WHERE LAST_DAY(ADD_MONTHS(TO_DATE(SUBSTR(PERIOD, 1, Instr(PERIOD, '-', -1, 1) -1)
|| '-' ||
LPAD(TO_NUMBER(SUBSTR(PERIOD, Instr(PERIOD, '-', -1, 1) +1))*3, 2, 0), 'YYYY-MM'), (5*12))) > SYSDATE;
解释:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.