我有一个将日期格式转换为DD / MM / YYYY来创建视图的代码。日期格式最初是dd.mm.yyyy hh24.mi.ss。所以我转换了它。
NVL(TO_CHAR(D_TRANS.TRANS_DATE, 'DD/MM/YYYY'), 'NULL') AS CASE_DATE
我想使用“日期之间”过滤器从视图中获取数据,该过滤器最初可以使用,现在不再可用。出现此错误
“在期望数字的位置找到了非数字字符” *原因:使用日期格式模型转换的输入数据为 不正确输入数据不包含数字,其中数字为 格式模型要求。 *操作:修正输入数据或日期格式模型,以确保 元素在数量和类型上匹配。然后重试该操作。
SELECT * FROM VIEW_info
WHERE CASE_DATE BETWEEN TO_DATE('&ENTER_START_DATE', 'DD/MM/YYYY')
AND TO_DATE('&ENTER_END_DATE', 'DD/MM/YYYY')
我也尝试过此操作,但只给出了从记录的记录中提取5条信息
SELECT * FROM VIEW_info
WHERE CASE_DATE BETWEEN TO_CHAR(TO_DATE('&ENTER_START_DATE',
'DD/MM/YYYY'), 'DD/MM/YYYY') AND TO_CHAR(TO_DATE('&ENTER_END_DATE',
'DD/MM/YYYY'), 'DD/MM/YYYY')
答案 0 :(得分:2)
那是行不通的;字符串与日期(或数字)的排序方式不同,因此“ 11”位于“ 2”之前。
如果CASE_DATE
是,那么您最好的选择是使用日期。是吗?那你
select * from view_info
where case_date between to_date('&start_date', 'dd/mm/yyyy')
and to_date('&end_date' , 'dd/mm/yyyy')
如果它是字符串(VARCHAR2
列),则必须首先将其转换为日期(假设格式为dd/mm/yyyy
),例如
select * from view_info
where to_date(case_date, 'dd/mm/yyyy') between to_date('&start_date', 'dd/mm/yyyy')
and to_date('&end_date' , 'dd/mm/yyyy')
由于您永远不知道用户将什么作为字符串输入,因此CASE_DATE
可能很容易是'09 / 04/2019'或'dd / fx / 234v'或'$$ 75x#f9',而您不会能够TO_DATE
这样的值,您的查询将失败。
答案 1 :(得分:0)
首先,您将DATE
转换为CHAR
:
TO_CHAR(D_TRANS.TRANS_DATE, 'DD/MM/YYYY') AS CASE_DATE
然后将字符串值转换为日期:
TO_DATE('&ENTER_START_DATE', 'DD/MM/YYYY')
并比较CHAR
和DATE
数据类型。
这就是导致您出错的原因。
如果要处理日期,为什么要首先将其转换为CHAR
?
如果仍然需要额外的CHAR
列,只需将其添加到视图中,而不要替换现有的列。