[英]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.