简体   繁体   English

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

[英]Getting error while running session as not avalid month

I have a oracle view in which we have column called dayofset which defined from subtraction of two date columns like(to_date(date_column1)-to_date(date_column2)) and it is stored as number(38) datatype.我有一个 oracle 视图,其中我们有一个名为 dayofset 的列,它是从两个日期列(如 (to_date(date_column1)-to_date(date_column2)) 的减法中定义的,它存储为 number(38) 数据类型。 2.so,when I run session in informatica to get data from oracle view to redshift.im getting error like "not a valid month". 2.so,当我在 informatica 中运行 session 以从 oracle 视图获取数据时,redshift.im 出现“不是有效月份”之类的错误。 3.Input values for that column is like (25-JAN-21,10-APR-13) 4.im getting the output values like 1,2,3,4... Like this all are integer values.(this column just do the datediff operation) and provide the difference between two dates. 3.该列的输入值类似于 (25-JAN-21,10-APR-13) 4.im 得到 output 值,例如 1,2,3,4... 就像这样,所有这些都是 integer 值。(此列只需执行 datediff 操作)并提供两个日期之间的差异。

Could you guys please help on this.你们能帮忙解决这个问题吗?

I have a oracle view in which we have column called dayofset which defined from subtraction of two date columns like to_date(date_column1)-to_date(date_column2) and it is stored as number(38) datatype.我有一个 oracle 视图,其中我们有一个名为dayofset的列,它是从两个日期列(如to_date(date_column1)-to_date(date_column2)的减法中定义的,它存储为number(38)数据类型。

Never use TO_DATE on a column that is already a DATE data type.切勿在已经是DATE数据类型的列上使用TO_DATE Just use.就用吧。

CREATE VIEW your_view (dayofset)
SELECT date_column1 - date_column2
FROM   your_table;

If you use TO_DATE then it takes a string as the first argument so you are effectively performing an implicit conversion to a string to convert it back to a date and your code is the equivalent of:如果您使用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;

Depending on your NLS_DATE_FORMAT session parameter, this could just be a waste of time or it could truncate the date and give you an unexpected result;根据您的NLS_DATE_FORMAT session 参数,这可能只是浪费时间,也可能会截断日期并给您带来意想不到的结果; however, any user can change their session parameters at any time so you may get different results for different users so you should NEVER rely on implicit conversions.但是,任何用户都可以随时更改其 session 参数,因此您可能会为不同的用户获得不同的结果,因此您永远不要依赖隐式转换。


If your columns are not a DATE data-type but are strings then use an explicit format model (and, if required, language) in the conversion:如果您的列不是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