[英]Getting error while running session as not avalid month
我有一个 oracle 视图,其中我们有一个名为 dayofset 的列,它是从两个日期列(如 (to_date(date_column1)-to_date(date_column2)) 的减法中定义的,它存储为 number(38) 数据类型。 2.so,当我在 informatica 中运行 session 以从 oracle 视图获取数据时,redshift.im 出现“不是有效月份”之类的错误。 3.该列的输入值类似于 (25-JAN-21,10-APR-13) 4.im 得到 output 值,例如 1,2,3,4... 就像这样,所有这些都是 integer 值。(此列只需执行 datediff 操作)并提供两个日期之间的差异。
你们能帮忙解决这个问题吗?
我有一个 oracle 视图,其中我们有一个名为
dayofset
的列,它是从两个日期列(如to_date(date_column1)-to_date(date_column2)
的减法中定义的,它存储为number(38)
数据类型。
切勿在已经是DATE
数据类型的列上使用TO_DATE
。 就用吧。
CREATE VIEW your_view (dayofset)
SELECT date_column1 - date_column2
FROM your_table;
如果您使用TO_DATE
那么它将一个字符串作为第一个参数,因此您可以有效地执行到字符串的隐式转换以将其转换回日期,并且您的代码相当于:
CREATE VIEW your_view (dayofset)
SELECT TO_DATE(
TO_CHAR(
date_column1,
(SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT')
),
(SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT')
)
-
TO_DATE(
TO_CHAR(
date_column2,
(SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT')
),
(SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT')
)
FROM your_table;
根据您的NLS_DATE_FORMAT
session 参数,这可能只是浪费时间,也可能会截断日期并给您带来意想不到的结果; 但是,任何用户都可以随时更改其 session 参数,因此您可能会为不同的用户获得不同的结果,因此您永远不要依赖隐式转换。
如果您的列不是DATE
数据类型而是字符串,则在转换中使用显式格式 model (以及,如果需要,语言):
CREATE VIEW your_view (dayofset)
SELECT TO_DATE(string_column1, 'DD-MON-RR', 'NLS_DATE_LANGUAGE=English')
- TO_DATE(string_column2, 'DD-MON-RR', 'NLS_DATE_LANGUAGE=English')
FROM your_table;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.