[英]Why date formats are different in APEX and Oracle SQL Developer?
Oracle SQL Developer 中的日期格式類似於DD-MON-YY
。
例如17-OCT-03
。
APEX 中的日期格式類似於MM/DD/YYYY
。
例如12/17/1980
。
為什么它們不同?
這可能會導致相同的 SQL 查詢在兩個應用程序上都不起作用。
我知道我可以通過使用 TO_DATE 和 TO_CHAR 函數來避免這樣的問題,但我想了解這個問題背后的邏輯。
每個應用程序都使用自己的默認日期格式嗎?
這也是我的經驗......是的,每個 Oracle 應用程序/工具都可以有自己的默認日期格式,但大多數只是使用在數據庫級別設置的默認顯示格式:
SQL> select name, value from v$parameter where name = 'nls_date_format';
NAME VALUE
--------------------- ---------------------
nls_date_format DD-Mon-YY
1 row selected.
但我不會將此描述為“一個問題”……它是一個有價值的特性,它為在基於 Oracle 的應用程序中顯示和輸入日期提供了很大的靈活性。
不過可以肯定的是,如果開發人員不了解 Oracle 日期的工作原理並編寫如下代碼:
-- BAD Coding
DECLARE
ld_holiday_date DATE;
BEGIN
-- Set a date type variable to a string value and
-- hope that Oracle can figure out what I mean.
ld_holiday_date := '01-JAN-2022';
END;
他們正在編寫特定於環境的代碼,這些代碼絕對不會在另一個數據庫(或會話)中工作,該數據庫與他們編寫代碼的數據庫(或會話)具有不同的 NLS_DATE_FORMAT。此外,上面的代碼必須進行隱式數據類型轉換(從字符串到日期),這將由 Oracle 嘗試找出字符串中的格式。
要針對 Oracle 日期編寫更具確定性的代碼,開發人員絕對應該使用 TO_DATE function。 這是上面代碼片段的防彈版本:
-- Good Coding
DECLARE
ld_holiday_date DATE;
BEGIN
-- I do not care what the NLS date format is in this
-- database... this code will work everywhere.
ld_holiday_date := TO_DATE ('01-JAN-2022', 'DD-MON-YYYY');
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.