在我的查询中修改什么来修复文字格式字符串错误?
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
格式,那么您将无法使其正常工作。它完全取决于格式,因为您已将其存储为字符串。
文字与格式字符串不匹配
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
格式,那么您将无法使其正常工作。它完全取决于格式,因为您已将其存储为字符串。