我需要在 HANA 存储过程中添加日期,但我收到错误消息
解析日期/时间时出错
我使用这个语句 wherep_end_date
是我的存储过程的参数。
v_end_date_plus := add_days (TO_DATE(' || p_end_date || ' , 'YYYY-MM-DD' ), 90)
有没有其他方法或者我做错了什么?
我需要在 HANA 存储过程中添加日期,但我收到错误消息
解析日期/时间时出错
我使用这个语句 wherep_end_date
是我的存储过程的参数。
v_end_date_plus := add_days (TO_DATE(' || p_end_date || ' , 'YYYY-MM-DD' ), 90)
有没有其他方法或者我做错了什么?
即使您没有发布收到的错误,我猜您代码中的问题是您引用输入变量的方式。
v_end_date_plus := add_days ( :p_end_date , 90);
使用参数前面的冒号 (:),您应该能够使用它,而无需将其转换为不同的数据类型。
@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)';
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)