基于SYSDATE筛选记录未返回预期结果的问题求助
问题分析与解决
你的问题核心是字段类型不匹配:ACTFINISH是字符串格式的日期(比如20190612000027),而SYSDATE-1是Oracle的日期类型值。直接让字符串和日期比较时,Oracle会自动把字符串转换成日期,但转换用的默认格式和你的字符串格式不匹配,导致所有记录的转换结果都满足>= SYSDATE-1,所以返回了全部数据。
解决方法
你需要手动把ACTFINISH字符串转换成日期类型,再做比较,用TO_DATE函数指定匹配的格式掩码:
WHERE TO_DATE("ACTFINISH", 'YYYYMMDDHH24MISS') >= SYSDATE - 1
这里的'YYYYMMDDHH24MISS'对应你的字符串格式:
YYYY:4位年份MM:2位月份DD:2位日期HH24:24小时制的小时MI:分钟SS:秒
额外建议
如果业务允许,最好把ACTFINISH字段的类型改成DATE或者TIMESTAMP,这样后续查询不用每次做类型转换,既能提升查询性能,也能避免这类隐式转换带来的问题。
内容的提问来源于stack exchange,提问作者Louis Early
相关产品推荐
相关产品推荐

