sql - 看到 ORA-01858 发现非数字字符?
问题描述
这是给 oracle sql developer 以下是我的查询
INSERT INTO ENROLLMENTS (DATE,PARTNER_NAME,ENROLLMENTS)
SELECT TO_CHAR(TS, 'DD-MON-YYYY HH AM') AS DATE, mrch_bnft_cd, COUNT(*)
FROM ENROLLMENTS
WHERE TS > trunc(sysdate-1/24, 'HH') + 5/24
AND TS < trunc(sysdate, 'HH') + 5/24
GROUP BY TO_CHAR(TS, 'DD-MON-YYYY HH AM'), mrch
ORDER BY TO_CHAR(TS, 'DD-MON-YYYY HH AM'), mrch_bnft
我收到一个错误
ORA-01858: a non-numeric character was found where a numeric was expected error
但错误并没有告诉我在哪里。有任何想法吗?
DATE = TIMESTAMP(6)
TS = TIMESTAMP(6)
PARTNER = VARCHAR2(35 BYTE)
ENROLLMENTS = NUMBER
MRCH_BNFT= VARCHAR2(35 BYTE)
解决方案
这是高度可疑的:
SELECT TO_CHAR(TS, 'DD-MON-YYYY HH AM') AS DATE
为什么要将 a 转换为timestamp
字符串以放入名为 的字段中date
?如果您希望日期减少到特定小时,请TRUNC()
改用:
SELECT TRUNC(TS, 'HH')
所以:
SELECT TRUNC(TS, 'HH') AS DATE, mrch_bnft_cd, COUNT(*)
FROM ENROLLMENTS
WHERE TS > trunc(sysdate-1/24, 'HH') + 5/24 AND
TS < trunc(sysdate, 'HH') + 5/24
GROUP BY TRUNC(TS, 'HH'), mrch
ORDER BY TRUNC(TS, 'HH'), mrch_bnft;
我也建议+ interval '5' hour
而不是日期算术,但你的版本实际上很好。
推荐阅读
- java - 尝试使用 Dagger 将架构更改为 MVVM 时遇到问题
- python - 通过 Python 将用户输入的 PC 名称插入到 Windows CMD 关机命令中
- java - 从 Spring Boot 测试中调用的 @Caching 方法 [@Transactional 注释] 不起作用
- php - 在 Woocommerce 中为特定用户角色禁用我的帐户编辑地址
- r - 使用可变列数将长转换为宽
- python - 变量默认值的 Python 快捷方式是另一个变量值(如果它是无)
- c# - 在 C# 泛型中传递“this”在没有强制转换的情况下不起作用
- python - Keras中具有二进制分类的多标签
- django - 需要登录 Django 基于类的视图
- grep - cat + grep 后输出文件比输入文件大得多