我有一个包含 TIMESTAMP(6) 类型的列的表,如果我尝试查询该表,只要我不对其进行参数化,一切都很好。
这有效:
SELECT
COUNT(*)
FROM
t_data
WHERE
DATA_TS >= TO_TIMESTAMP('13.09.18 11:30:00')
AND DATA_TS <= TO_TIMESTAMP('13.09.18 11:33:00');
但是,这会失败,因为 ORA-01858“在需要数字的地方发现了一个非数字字符”,提供了上述值。我还尝试使用 NLS_PARAMETERS 中的格式掩码将参数包装在 TO_TIMESTAMP() 中。
SELECT
COUNT(*)
FROM
t_data
WHERE
DATA_TS >= TO_TIMESTAMP(:AStart,'DD.MM.RR HH24:MI:SSXFF')
AND DATA_TS <= TO_TIMESTAMP(:AEnd,'DD.MM.RR HH24:MI:SSXFF');
任何人都知道是什么导致了这个问题?
测试用例:创建表
create table t_data (
data varchar2(80),
data_ts timestamp
);
插入数据
Insert into t_data (data,data_ts) VALUES ('TEST', systimestamp);
使用 &AStart 代替 :AStart 效果很好,如果这对某人有帮助的话