繁体   English   中英

运行 session 作为无效月份时出现错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM