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

Sql 在我的查询中修改什么来修复文字格式字符串错误?,sql,oracle,datetime-format,Sql,Oracle,Datetime Format,文本与格式字符串不匹配 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为DATE 我也有这种情况 Select TO_DATE(TO_CHAR(A.DATE,'DD/MM/YYYY') || TO_CHAR(A.TIME),'DD/MM/

文本与格式字符串不匹配

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为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
选择TO_DATE(TO_CHAR(A.DATE,'DD/MM/yyyyy')| TO_CHAR(A.TIME),'DD/MM/yyyyyyyyh24:MI:SS')
它的生成错误如何修改它

试试这个

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

     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.DATE,'DD/MM/YYYY')||
A.时间,'DD/MM/yyyyy HH24:MI:SS')
<(截止日期('20/04/2015','DD/MM/YYYY')+1)
然后“你”或“我”结束
从双制表符A开始
A.TIME类型为varchar2(20),A.DATE为DATE

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

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
14/05/2015 12:57:42
首先修复您的设计

作为一种可能的解决方法,您可以将日期文字附加到时间,然后将应用到\u 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;

您可能面临的问题是,如果时间列不符合格式
'HH24:MI:SS
,则无法使其工作。它完全取决于格式,因为您已将其存储为字符串。

请在这些列中提供数据。没有它们,我们无法告诉您格式不匹配的原因。请提供一些数据示例。如果A.TIME列只包含时间,则将掩码更改为to_DATE(to_CHAR(A.DATE,'DD/MM/YYYY')| to_CHAR(A.TIME,'HH24:MI:SS'),'DD/MM/yyyyy HH24:MI:SS')。此外,如果你将A.DATE+A.TIME相加,你应该得到所需的结果日期,而不需要将字符转换为日期,反之亦然。日期数据类型在Oracle中表示为浮点数。小数点前的部分表示天数,小数点后的部分表示时间。@AlexPoole查询很长,我对日期有详细说明condition@JanisBaiza斯特凡·约达诺夫。。这些柱子的结构会好吗?@Moudiz如果这些柱子好的话,你说的结构是什么意思?这些列的类型是什么?我有以下条件2<截止日期('20/04/2015','DD/MM/YYYY')+1感谢您的帮助和信息Lalithank感谢您的帮助信息stefan,