Literal与格式字符串
不匹配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
它产生错误如何修改
答案 0 :(得分:2)
A.TIME类型为varchar2(20),A.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
格式,那么您将无法使其正常工作。它完全取决于格式,因为您已将其存储为字符串。
答案 1 :(得分:1)
试试这个
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
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