Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle sql-将字符串转换为日期_Sql_Oracle - Fatal编程技术网

Oracle sql-将字符串转换为日期

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:输入值对于日期格式来说

我在将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:输入值对于日期格式来说不够长

任何帮助都将不胜感激。

只需使用“截止日期”即可

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(同样在幕后)将加法结果转换为四个字符的字符串。这还不足以成为一个约会(无论如何,这将是一个错误的约会!)