成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析Oracle多語言環境下to_date時間轉換

數據庫 Oracle
今天我們要介紹的是Oracle多語言環境下to_date時間轉換問題,相信很多在多語言環境下工作的DBA都會遇到這一問題。

現象:在多語言環境下使用過Oracle的同學想必都遇到過這樣一個問題,

  1. date_v date;  
  2. date_v :to_date('2010/11/16');--或'2010/11/16' 

同一個服務器,不同Oracle clinet 不一定都行得通。

原因: 不指定轉換字符串的情況下,Oracle使用既定的格式串進行日期轉換操作,執行SELECT * FROM NLS_SESSION_PARAMETERS;察看NLS信息,其中NLS_DATE_FORMAT是指當前使用的格式化字符串。我這里是"DD-MON-RR",dd代表日rr代表年mon代表月,所以to_date('2010/11/16')==to_date('2010/11/16','DD-MON-RR'),

MON在NLS_LANGUAGE為AMERICAN的情況下只識別Nov而不是別11,所以轉換失敗。

解決: 既然知道問題原因了,解決這個問題有三個方法。

 1,更改NLS_LANGUAGE會使NLS_DATE_FORMAT同步為相應的格式。我們這里需要japanese格式。我通過增加環境變量(NLS_LANG=JAPANESE_JAPAN.JA16SJIS)實現。

NLS_DATE_FORMAT變成RR-MM-DD了,測試,select to_date('2010/11/15') from dual--ok。

 2,增加環境變量NLS_DATE_FORMAT(RR-MM-DD或yy-mm-dd或yy/mm/dd任何你需要的格式)。

測試,select to_date('2010/11/15') from dual--ok。

這里要注意經過我測試,rr和yy是一個意思 ,連接符號-和/都可以使轉換成功。

更改NLS_LANGUAGE或NLS_DATE_FORMAT的方法可以google以下.

到這里基本大功告成了,但是你也許會說我們不能隨便修改Oracle client的這些配置,因為其他實例也許需要它!下面是第三個方法

 3,to_date有個重載方法,提供轉換需要的format。

 無論NLS_DATE_FORMAT是什么,select to_date('2010/11/15','yy/mm/dd') from dual--ok。

但是還是不要高興過早了,select to_date('2010/nov/15','yy/mon/dd') from dual--不一定ok。

 當NLS_LANGUAGE環境為AMERICAN時是OK的,為East Asia language時mon格式符真正識別的是11月(這里japan和china還是不一樣的,看起來是一個字,但是從我機器輸入select to_date('2010/11月/15','yy/mon/dd') from dual卻出錯。

具體細節可以參考文章http://www.eygle.com/special/NLS_CHARACTER_SET_05.htm

現在問題明白了,但解決方法這么多,難道轉換一個字符串到日期真的這么周折?

 我選擇第三個方法,因為它是我能控制的。select to_date('2010/11/15','yy/mm/dd') from dual--ok,因為mm的轉譯永遠是阿拉伯數字啊。

案例:這樣一個情景,現在有個存儲要部署在未知地理未知服務器上,它需要一個date參數,plsql程序員想當然的吧它定義成了date,不巧,調用存儲的另一個程序員是個想通過腳本來調用存儲,并且通過windows計劃任務觸發腳本執行,這個腳本給了一個2010/11/15,看起來沒任何問題,但是不巧這臺應用服務器的Oracle客戶端的NLS_LANGUAGE=AMERICAN,真是無巧不成書啊,當Oracle做這樣一個調用前的參數轉換工作的時候 date_v date; date_v := '2010/11/16'(這個轉換是默認的不可控的);災難來臨了。

 怎么避免這樣的災難呢?參數改成nvarchar吧,自己做參數轉換,使用上面我們的第三個解決方法data_v:= to_date(data_vchar,'yy/mm/dd'),其實災難可以避免。

 有人會說,調用存儲的人傳了個2010¥/11……/16!怎么辦,你的yyyy/mm/dd如何處理?當然沒法處理,我的方法是給出一個準確的文檔告訴對方參數應該是什么格式的,出錯了也可以排除責任了。 另外我自己轉換可以添加一些異常機制來提示問題,Oracle自動轉換出錯了可是很霸道的。

NLS是什么,可以看這里http://www.cnblogs.com/wzc998/archive/2010/11/17/1879652.html

【編輯推薦】

  1. Oracle 數據集成的實際解決方案
  2. 對Oracle Raw常見類型的解釋
  3. Oracle歸檔模式的相關切換的實際操作步驟
  4. 細數你應該修煉的Oracle基本功
  5. Oracle修改字段類型2種方案介紹

 

責任編輯:彭凡 來源: 博客園
相關推薦

2010-10-28 15:38:24

Oracle to_d

2010-10-25 16:13:31

Oracle to_d

2014-04-16 14:50:20

Spark

2011-08-05 17:54:33

Cocoa Touch 多語言

2012-04-19 11:40:21

Titanium

2014-07-09 09:20:06

WPFWPF應用

2009-08-25 10:44:50

C#實現多語言

2024-05-09 08:14:09

系統設計語言多語言

2022-08-09 07:22:15

語言數據庫程序

2023-08-04 10:18:15

2021-09-07 10:17:35

iOS多語言適配設計

2021-06-29 21:48:32

開源語言架構

2009-08-03 17:33:01

ASP.NET多語言支

2009-07-17 10:02:29

WPF程序多語言支持

2021-07-24 11:41:42

前端開發技術

2021-07-07 17:25:08

模型人工智能翻譯

2020-04-14 09:50:02

2009-08-31 17:13:09

2019-08-22 10:20:41

Ubuntu設置語言

2019-12-05 16:00:15

Vim插件編程文本編輯器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色噜噜亚洲男人的天堂 | 午夜视频在线观看一区二区 | 888久久久 | 一级在线观看 | 在线播放中文字幕 | 亚洲精品68久久久一区 | 欧美精品日韩精品 | 久久丝袜 | 精品久久久久一区二区国产 | 精品日韩 | 精品一区二区三区91 | 亚洲一区欧美 | 波多野结衣亚洲 | 国产欧美一区二区久久性色99 | 97色在线视频 | 日韩在线欧美 | 女朋友的闺蜜3韩国三级 | 日韩a视频 | 在线免费观看毛片 | 伊色综合久久之综合久久 | 在线观看一区 | 国产精品伦理一区 | 在线视频亚洲 | 日日射影院 | 精品一区二区三区在线播放 | 四虎国产 | 一区二区在线 | 国产成人在线播放 | 国产99久久久国产精品 | 一区二区三区亚洲视频 | 国产精品成人一区二区 | 国产一区二区黑人欧美xxxx | 日韩亚洲视频 | 欧美日韩久久久 | 日韩欧美成人精品 | 国精产品一区一区三区免费完 | 9999久久 | 中文字幕韩在线第一页 | 欧美伊人久久久久久久久影院 | 成人激情视频免费在线观看 | 婷婷国产一区 |