Oracle sql-将字符串转换为日期
我在将varchar(yyyyymmdd)转换为date(yyyyymmdd)时遇到问题 我有一个带有参数(pdate varchar2,yyyyymmdd格式)的过程,它也需要转换为yyyymmdd格式的日期类型。 到目前为止我试过了Oracle sql-将字符串转换为日期,sql,oracle,Sql,Oracle,我在将varchar(yyyyymmdd)转换为date(yyyyymmdd)时遇到问题 我有一个带有参数(pdate varchar2,yyyyymmdd格式)的过程,它也需要转换为yyyymmdd格式的日期类型。 到目前为止我试过了 vdate date; vdate := (to_date(SUBSTR(pdate,1,4)+SUBSTR(pdate,5,2)+SUBSTR(pdate,7,2), 'yyyymmdd')); 这引发了一个错误ORA-01840:输入值对于日期格式来说
vdate date;
vdate := (to_date(SUBSTR(pdate,1,4)+SUBSTR(pdate,5,2)+SUBSTR(pdate,7,2), 'yyyymmdd'));
这引发了一个错误ORA-01840:输入值对于日期格式来说不够长
任何帮助都将不胜感激。只需使用“截止日期”即可
select to_date(MyDate, 'yyyymmdd')
from mytable
使用以下各项进行测试:
select to_date('20170831','yyyymmdd')
from dual
此外,要在Oracle中连接,请使用双管|
select 'Chicken'||'Food'
from dual
只需使用一个约会工具
select to_date(MyDate, 'yyyymmdd')
from mytable
使用以下各项进行测试:
select to_date('20170831','yyyymmdd')
from dual
此外,要在Oracle中连接,请使用双管|
select 'Chicken'||'Food'
from dual
如果pdate在yyyymmdd之后有其他字符,并且yyyymmdd位于整个文本的开头,则可以使用
SELECT TO_DATE(SUBSTR(pdate,1,8), 'yyyymmdd')
FROM yourtable;
范例
SELECT TO_DATE(SUBSTR('20170831 10:30am',1,8), 'yyyymmdd')
FROM dual;
否则,您可以按照大多数回复者的建议直接使用TO_DATE(),如果pdate在yyyyymmdd之后有其他字符,并且yyyymmdd位于整个文本的开头,您可以使用
SELECT TO_DATE(SUBSTR(pdate,1,8), 'yyyymmdd')
FROM yourtable;
范例
SELECT TO_DATE(SUBSTR('20170831 10:30am',1,8), 'yyyymmdd')
FROM dual;
否则,您可以按照大多数回复者的建议直接使用TO_DATE()失败的更新的值是多少?将
+
更改为|
考虑:选择(SUBSTR('20170101',1,4)| SUBSTR('20170101',5,2)| | SUBSTR('20170101',7,2)),到|日期(SUBSTR('20170101',1,4)| SUBSTR('20170101',5,2)| SUBSTR('20170101',7,2),'yyyyyymmdd'),到|日期('20170101','yyyyyydmdm')
假设您的pdate包含完整的信息集,您只需要更新(pdate,'yyyyymmdd')
。事实上,我很确定您可以摆脱您的过程,只需使用to_date()
函数!正如已经指出的那样,您的尝试失败的原因是在Oracle中使用|
进行连接,而不是使用+
。您所做的是将年、月和日期提取为字符串(四位数、两位数、两位数)。然后你添加它们。在幕后,Oracle将它们转换为NUMBER
并添加它们。然后将应用于_date()
,它接受varchar2
输入,因此Oracle(同样在幕后)将加法结果转换为四个字符的字符串。哪一个时间不够长,不足以成为一个日期(无论如何,这将是一个错误的日期!)失败的pdate的价值是什么?将+
更改为|
考虑:选择(SUBSTR('20170101',1,4)| SUBSTR('20170101',5,2)| | SUBSTR('20170101',7,2)),到|日期(SUBSTR('20170101',1,4)| SUBSTR('20170101',5,2)| SUBSTR('20170101',7,2),'yyyyyymmdd'),到|日期('20170101','yyyyyydmdm')
假设您的pdate包含完整的信息集,您只需要更新(pdate,'yyyyymmdd')
。事实上,我很确定您可以摆脱您的过程,只需使用to_date()
函数!正如已经指出的那样,您的尝试失败的原因是在Oracle中使用|
进行连接,而不是使用+
。您所做的是将年、月和日期提取为字符串(四位数、两位数、两位数)。然后你添加它们。在幕后,Oracle将它们转换为NUMBER
并添加它们。然后将应用于_date()
,它接受varchar2
输入,因此Oracle(同样在幕后)将加法结果转换为四个字符的字符串。这还不足以成为一个约会(无论如何,这将是一个错误的约会!)