【问题标题】:Oracle sql - convert string to dateOracle sql - 将字符串转换为日期
【发布时间】:2017-08-31 14:40:03
【问题描述】:

我在将 varchar(yyyymmdd) 转换为 date(yyyymmdd) 时遇到问题。

我有一个带有参数(pdate varchar2,yyyymmdd 格式)的过程,它也需要转换为 yyyymmdd 格式的日期类型。 到目前为止我试过了。

vdate date;

 vdate := (to_date(SUBSTR(pdate,1,4)+SUBSTR(pdate,5,2)+SUBSTR(pdate,7,2), 'yyyymmdd'));

这引发了一个错误 ORA-01840: input value not long enough for date format。

任何帮助将不胜感激。

【问题讨论】:

  • 更新失败的价值是什么?将+ 更改为|| 考虑:SELECT (SUBSTR('20170101',1,4)||SUBSTR('20170101',5,2)||SUBSTR('20170101',7,2)) , to_date(SUBSTR('20170101',1,4)||SUBSTR('20170101',5,2)||SUBSTR('20170101',7,2),'YYYYMMDD') , To_date('20170101','YYYYDDMM') from dual;
  • 您只需要to_date(pdate, 'yyyymmdd'),假设您的 pdate 包含完整的信息集。事实上,我很确定你可以摆脱你的程序而只使用to_date() 函数!
  • 正如已经指出的那样,您的尝试失败的原因是连接是在 Oracle 中使用 || 完成的,而不是使用 + 完成的。您正在做的是将年份、月份和日期提取为字符串(四位数、两位数、两位数)。然后你添加他们。在幕后,Oracle 将它们转换为 NUMBER 并添加它们。然后应用to_date(),它接受varchar2 输入,因此Oracle(再次在幕后)将加法的结果转换为四个字符的字符串。这还不足以成为约会(无论如何这都是错误的!)

标签: sql oracle


【解决方案1】:

只需使用 to_date

select to_date(MyDate, 'yyyymmdd')
from mytable

测试:

select to_date('20170831','yyyymmdd')
from dual

另外,要在 Oracle 中连接,请使用双管道 ||

select 'Chicken'||'Food'
from dual

【讨论】:

    【解决方案2】:

    如果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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      相关资源
      最近更新 更多