簡體   English   中英

使用 oracle 頂點動態操作設置連接的日期時間值

[英]Using oracle apex dynamic action to set a date time value that is concatenated

我在一個頁面項目中有一個日期值,而在另一個頁面項目中有一個時間值。 我想將日期與時間連接起來,並使用動態操作將其設置為另一個項目。 結構如下

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 開發人員中使用硬編碼值運行 select 時,它會返回正確的內容,但是當我嘗試使用 concat 日期在項目中設置值時,它有時會給我無效的數字錯誤,而不是有效的月份。

你能建議更正的方法或替代方法嗎(也許使用一個函數)

謝謝你。

你可以讓它更簡單,例如

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;

來自評論:

頁面項目都是日期項目

由於它們是日期,您可以簡單地使用:

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

“它們是日期項目”是什么意思? 它們是“日期選擇器”類型,它們是否在表單中具有“日期”類型的源列,或者它們是否 map 到數據庫中的日期列?

在 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

由於您正在處理字符串,因此此處存在錯誤空間,如果用戶輸入與格式不完全匹配,則必須確保正確處理錯誤,因為這可能會生成無效的日期值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM