【问题标题】:Using oracle apex dynamic action to set a date time value that is concatenated使用 oracle apex 动态操作设置连接的日期时间值
【发布时间】:2021-04-30 19:54:03
【问题描述】:

我在一个页面项目中有一个日期值,而在另一个页面项目中有一个时间值。我想将日期与时间连接起来,并使用动态操作将其设置为另一个项目。结构如下

P_DATE = '01-01-2021'(项目是日期,格式掩码为 dd-mm-yyyy)

P_TIME = '08:30 AM'(项目是日期,格式掩码为 HH:MIAM)

查询:

select to_date(to_char(to_date(P_DATE ,'DD-MON-YYYY'), 'DD-MON-YYYY') || ' '|| 
to_char(P_TIME,'HH:MIAM'),'DD-MON-YYYY HH:MIAM') a
from dual;

预期结果:01-01-2021 08:30 AM

动态操作是更改 P_DATE 项目,然后从 sql 查询中连接 P_DATE 和 P_TIME 并将其设置为 P_VALUE

当我在 sql developer 中使用硬编码值运行 select 时,它会返回正确的内容,但是当我尝试使用 concat 日期设置项目中的值时,有时会出现无效数字错误,而不是有效月份。

您能否提出更正的方法或替代方法(可能使用函数)

谢谢。

【问题讨论】:

    标签: sql oracle date oracle-apex


    【解决方案1】:

    你可以让这个更简单,例如

    with test as (
           select '01-01-2021' d, '08:30 PM' t 
           from dual)
    select to_date(d||' '|| t,'MM-DD-YYYY HH:MI PM') 
    from test;
    

    【讨论】:

    【解决方案2】:

    “它们是日期项目”是什么意思?它们是“Date Picker”类型的,它们是否在表单中具有“DATE”类型的源列,或者它们是否映射到数据库中的 DATE 列?

    在 APEX 中,所有页面项基本上都是字符串。 Web 应用程序的前端不知道 oracle 数据类型,因此所有内容都被视为纯字符串,并且在处理过程中完成了转换。所以这就是你应该如何对待页面项目,而不是像你在 SQL 或 PL/SQL 中那样的 DATE 数据类型。要连接日期字符串和时间字符串,您可以直接连接而不使用TO_CHAR。这可以在普通的 PL/SQL 中完成,无需 SELECT FROM DUAL - 这只是对 SQL 引擎的不必要调用。

    这是对 P_VALUE 变化的“真实”动作。在 21.1 上测试,因此根据您的版本可能会有一些属性命名差异,但它的工作原理相同。

    动作:执行服务器端代码。
    来源:

    :P_VALUE := :P_DATE ||' '||:P_TIME
    

    要提交的项目:P_DATE、P_TIME。
    要退回的项目:P_VALUE

    由于您处理的是字符串,因此此处存在错误空间,如果用户输入与格式不完全匹配,您必须确保正确处理错误,因为这可能会生成无效的日期值。

    【讨论】:

      【解决方案3】:

      来自 cmets:

      页面项都是日期项

      由于它们是日期,您可以简单地使用:

      SELECT p_date + (p_time - TRUNC(p_time)) AS a
      FROM   DUAL;
      

      【讨论】:

      • 这对我来说失败了: WITH test AS (SELECT '01-01-2021' p_date, '08:30 PM' p_time FROM dual) SELECT p_date + (p_time - TRUNC(p_time)) AS a从测试; ORA-01722: 无效号码
      • @StewS2 '01-01-2021' 和 '08:30 PM' 都是字符串文字,它们是 NOT 日期数据类型。正如我在第一行所说,这个答案适用于两个项目都是日期,这是 OP 遇到的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多