运行此查询时出错:
select a.date, e.date, x.rlv, e.rlv
from data_1 a
inner join data_2 e on e.date = (select to_char(to_date(x.date,'yyyymmdd','yyyymmdd')
- INTERVAL '3' month,'yyyymmdd') from data_2 x where x.rlv=e.rlv)
;
我发现了一个错误:
12702. 00000 - "invalid NLS parameter string used in SQL function"
*Cause: An unknown parameter name or invalid value is specified in a NLS parameter string
你有什么想法吗?提前感谢
发布于 2021-06-22 05:34:27
它的主要问题是,正如@粘滞位注释的那样,您正在处理表示日期值的字符串。选择错误,如果可能,切换到DATE
数据类型。
除此之外,您的代码无法工作,因为您使用了错误的语法。下面是如何将列名从date
(为数据类型保留的)修改为col
):
Your: to_char(to_date(col, 'yyyymmdd', 'yyyymmdd') - interval '3' month, 'yyyymmdd')
Mine: to_char(to_date(col, 'yyyymmdd') - interval '3' month, 'yyyymmdd')
比较并看看不同之处。
因为,如果您“修复”它,那么interval
工作得很好--因此,如果您愿意,可以从add_months
切换到它。
SQL> with test (col) as
2 (select '20210622' from dual) --> today's date,
3 select to_char(to_date(col, 'yyyymmdd') - interval '3' month, 'yyyymmdd') result
4 from test;
RESULT
--------
20210322 --> 3 months earlier
SQL>
发布于 2021-06-23 21:24:15
你好,谢谢你的回答。我通过使用add_monts:(select to_char(add_months(to_date(x.date,'yyyymmdd'),-3), 'yyyymmdd')
找到了这个解决方案:(select to_char(add_months(to_date(x.date,'yyyymmdd'),-3), 'yyyymmdd')
的优化程度很高,但它至少有效。
https://stackoverflow.com/questions/68075704
复制相似问题