1

我需要在 HANA 存储过程中添加日期,但我收到错误消息

解析日期/时间时出错

我使用这个语句 wherep_end_date是我的存储过程的参数。

v_end_date_plus := add_days (TO_DATE(' || p_end_date || ' , 'YYYY-MM-DD' ), 90)

有没有其他方法或者我做错了什么?

4

3 回答 3

2

即使您没有发布收到的错误,我猜您代码中的问题是您引用输入变量的方式。

v_end_date_plus := add_days ( :p_end_date , 90);

使用参数前面的冒号 (:),您应该能够使用它,而无需将其转换为不同的数据类型。

于 2016-04-29T14:08:38.533 回答
0

@LarsBr。正确的是,您需要一个冒号 (:) 来引用该变量,并且如果它确实是 DATE 类型,则不需要再次转换 TO_DATE。

但此外,在您的示例中,您与引号和连接有一些混淆,这让我认为您实际上想要使用 p_end_date 构造一些字符串。这需要先转换为日期:

p_end_date := '2016-05-03'; -- for example
v_end_date_plus := add_days(TO_DATE( :p_end_date , 'YYYY-MM-DD' ), 90);

您示例中的部分' || p_end_date || '看起来也有点像整个代码实际上是要在 EXEC 或类似中使用的字符串的一部分。如果是这种情况,您需要为两个参数转义单引号,例如

exec 'v_end_date_plus := add_days(TO_DATE(''' || :p_end_date || ''', ''YYYY-MM-DD'' ), 90)';
于 2016-05-03T21:05:00.417 回答
-1

p_end_date应该是 varchar 字段,或您的技术中使用的适当字符串文字。它不应包含在引号中。

v_end_date_plus := add_days (TO_DATE(p_end_date , 'YYYY-MM-DD' ), 90)

使用 ORACLE 作为参考的解释:

在 Oracle 数据库中,默认的日期格式是 dd-MON-RR 或 dd-MON-YYYY。

所以,如果我对 p_end_date 变量使用正确的日期格式,我可以获得输出。 在此处输入图像描述

但是,如果我偏离这种默认格式,我的尝试就会出错。

在此处输入图像描述

因此,如果我想灵活地重新定义p_end_date我选择的格式,而不是按照默认设置,它应该是字符串文字。(Oracle 中的 varchar)。

编辑:

这个答案的本质只是建议变量应该作为 varchar 传递。借鉴以下 Lars Br 的建议来修改 p_end_date 变量的语法:

v_end_date_plus := add_days (TO_DATE(:p_end_date , 'YYYY-MM-DD' ), 90)
于 2016-04-28T18:00:55.903 回答