在我的查询中修改什么来修复文字格式字符串错误?

What to modify in my query to fix literal format string error?

文字与格式字符串不匹配

select TO_DATE(TO_CHAR(A.DATE,'DD/MM/YYYY') || TO_CHAR(A.TIME),'DD/MM/YYYY HH24:MI:SS') 
from dual , TAB A

如何修改我的查询才不会产生上述错误?

A.TIME 类型是 varchar2(20) 并且 A.DATE 是日期

我也有这种情况

Select TO_DATE(TO_CHAR(A.DATE,'DD/MM/YYYY') || TO_CHAR(A.TIME),'DD/MM/YYYY HH24:MI:SS')  < TO_DATE('20/04/2015','DD/MM/YYYY') +1
from dual , TAB A

生成错误如何修改

试试这个

select TO_DATE(TO_CHAR(A.DATE,'DD/MM/YYYY') || ' ' || A.TIME,'DD/MM/YYYY HH24:MI:SS') 
from dual , TAB A

只有当您的 A.TIME 列中的数据采用 HH24:MI:SS 格式时,这才有效。 您应该使用 case-when 来处理 select 列表中的布尔表达式。

     Select 
    case when TO_DATE(TO_CHAR(A.DATE,'DD/MM/YYYY') ||
         A.TIME,'DD/MM/YYYY HH24:MI:SS')  
            < (TO_DATE('20/04/2015','DD/MM/YYYY') +1) 
    then 'Y' else 'N' end
   from dual , TAB A

A.TIME type is varchar2(20) and A.DATE is date

永远不要单独存储日期和时间元素。 DATE 数据类型同时具有精确到秒的日期和时间元素.

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
14/05/2015 12:57:42

先修复你的设计。

作为一种可能的解决方法,您可以将日期文字附加到时间,然后应用 TO_DATE 将其转换为日期。

例如,

SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';

Session altered.

SQL> WITH DATA AS(
  2  SELECT SYSDATE dt, '13:05:10' tm FROM dual
  3  )
  4  SELECT TO_DATE(
  5     TO_CHAR(dt,'DD/MM/YYYY')
  6     || ' '||
  7     tm,
  8     'DD/MM/YYYY HH24:MI:SS') as "datetime"
  9  FROM data;

datetime
-------------------
14/05/2015 13:05:10

您修改后的查询如下所示:

SELECT TO_DATE(
   TO_CHAR(t.date,'DD/MM/YYYY')
   || ' '||
   t.time,
   'DD/MM/YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=ENGLISH') AS "datetime"
FROM your_table t;

您可能会遇到的问题是,如果 TIME 列不符合 'HH24:MI:SS 格式,那么您将无法使其正常工作。它完全取决于格式,因为您已将其存储为字符串。