亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

甲骨文NLS_TERRITORY覆蓋NLS_DATE_FORMAT

甲骨文NLS_TERRITORY覆蓋NLS_DATE_FORMAT

PHP
富國滬深 2022-09-12 09:18:35
在 PHP 應用程序中,我指定ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';ALTER SESSION SET NLS_DATE_LANGUAGE = 'RUSSIAN';輸出數據格式是預期的 2020-01-31 21:21:47 但是當我添加ALTER SESSION SET NLS_TERRITORY = 'CIS';NLS_DATE_FORMAT不起作用,NLS_TERRITORY會覆蓋它。31.01.20
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

(以及其他設置)派生自 。因此,當您設置區域時,數據庫還會將日期格式設置為此區域的默認格式:nls_date_formatnls_territory


select value from nls_session_parameters

where  parameter = 'NLS_DATE_FORMAT';


VALUE

--------------------------------------------------------------------------------

DD-MON-RR


ALTER SESSION SET NLS_TERRITORY = 'CIS';


select value from nls_session_parameters

where  parameter = 'NLS_DATE_FORMAT';


VALUE

--------------------------------------------------------------------------------

DD.MM.RR

因此,您需要在區域之后設置日期格式:


ALTER SESSION SET NLS_TERRITORY = 'CIS';

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

ALTER SESSION SET NLS_DATE_LANGUAGE = 'RUSSIAN';

select value from nls_session_parameters

where  parameter = 'NLS_DATE_FORMAT';


VALUE

--------------------------------------------------------------------------------

YYYY-MM-DD HH24:MI:SS

或者 - 更好的是 - 在轉換中使用顯式格式掩碼:


ALTER SESSION SET NLS_TERRITORY = 'CIS';

select sysdate, to_char ( sysdate, 'YYYY-MM-DD HH24:MI:SS' ) from dual;


SYSDATE  TO_CHAR(SYSDATE,'YY

-------- -------------------

07.02.20 2020-02-07 09:25:35



查看完整回答
反對 回復 2022-09-12
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

Oracle 的默認日期格式取決于設置。因此,當您設置時,您還告訴Oracle將(和其他類似參數)重置為新區域的默認值。NLS_TERRITORYNLS_TERRITORYNLS_DATE_FORMAT

甲骨文文檔中

1.206 NLS_TERRITORY

NLS_TERRITORY指定日和周編號應遵循其約定的領土名稱。

...

此參數還建立默認日期格式、默認小數字符和組分隔符以及默認 ISO 和本地貨幣符號。

有關這些設置的信息,請參閱“NLS_DATE_FORMAT”、“NLS_NUMERIC_CHARACTERS”、“NLS_CURRENCY”和“NLS_ISO_CURRENCY”。

如果要更改區域和日期語言 &格式,則需要先更改區域(這會將 等的值隱式更改為區域的默認值),然后您可以更改日期語言 &格式以覆蓋這些默認區域設置:NLS_DATE_FORMAT

所以:


ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

ALTER SESSION SET NLS_DATE_LANGUAGE = 'RUSSIAN';

ALTER SESSION SET NLS_TERRITORY = 'CIS';

應該是:


ALTER SESSION SET NLS_TERRITORY = 'CIS';

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

ALTER SESSION SET NLS_DATE_LANGUAGE = 'RUSSIAN';


查看完整回答
反對 回復 2022-09-12
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

除了其他答案之外,您還應該將設置合并到一個語句中:ALTER SESSION


ALTER SESSION SET NLS_TERRITORY = 'CIS' NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' NLS_DATE_LANGUAGE = 'RUSSIAN';

如果您從 PHP 執行語句(而不僅僅是通過 PL/SQL 塊或登錄觸發器),則特別建議這樣做,因為它減少了 PHP 和數據庫之間的往返次數,并且可以顯著提高性能。


有關使用觸發器的討論,請參閱免費的甲骨文 PDF 地下 PHP 和甲骨文手冊的第 304 頁。


如果您確實需要從 PHP 執行該語句,并且有其他 SQL 命令在登錄時執行,請將它們全部包裝在一個匿名的 PL/SQL 塊中:


begin

     execute immediate

       'alter session set nls_date_format = ''YYYY-MM-DD'' nls_language = AMERICAN';

     -- other SQL statements could be put here

end;

這可以通過一次調用執行,因此只需要一次往返。oci_parse()


查看完整回答
反對 回復 2022-09-12
  • 3 回答
  • 0 關注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號