自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺析Oracle多語言環(huán)境下to_date時(shí)間轉(zhuǎn)換

數(shù)據(jù)庫 Oracle
今天我們要介紹的是Oracle多語言環(huán)境下to_date時(shí)間轉(zhuǎn)換問題,相信很多在多語言環(huán)境下工作的DBA都會(huì)遇到這一問題。

現(xiàn)象:在多語言環(huán)境下使用過Oracle的同學(xué)想必都遇到過這樣一個(gè)問題,

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

同一個(gè)服務(wù)器,不同Oracle clinet 不一定都行得通。

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

MON在NLS_LANGUAGE為AMERICAN的情況下只識(shí)別Nov而不是別11,所以轉(zhuǎn)換失敗。

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

 1,更改NLS_LANGUAGE會(huì)使NLS_DATE_FORMAT同步為相應(yīng)的格式。我們這里需要japanese格式。我通過增加環(huán)境變量(NLS_LANG=JAPANESE_JAPAN.JA16SJIS)實(shí)現(xiàn)。

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

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

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

這里要注意經(jīng)過我測試,rr和yy是一個(gè)意思 ,連接符號(hào)-和/都可以使轉(zhuǎn)換成功。

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

到這里基本大功告成了,但是你也許會(huì)說我們不能隨便修改Oracle client的這些配置,因?yàn)槠渌麑?shí)例也許需要它!下面是第三個(gè)方法

 3,to_date有個(gè)重載方法,提供轉(zhuǎn)換需要的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。

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

具體細(xì)節(jié)可以參考文章http://www.eygle.com/special/NLS_CHARACTER_SET_05.htm

現(xiàn)在問題明白了,但解決方法這么多,難道轉(zhuǎn)換一個(gè)字符串到日期真的這么周折?

 我選擇第三個(gè)方法,因?yàn)樗俏夷芸刂频?。select to_date('2010/11/15','yy/mm/dd') from dual--ok,因?yàn)閙m的轉(zhuǎn)譯永遠(yuǎn)是阿拉伯?dāng)?shù)字啊。

案例:這樣一個(gè)情景,現(xiàn)在有個(gè)存儲(chǔ)要部署在未知地理未知服務(wù)器上,它需要一個(gè)date參數(shù),plsql程序員想當(dāng)然的吧它定義成了date,不巧,調(diào)用存儲(chǔ)的另一個(gè)程序員是個(gè)想通過腳本來調(diào)用存儲(chǔ),并且通過windows計(jì)劃任務(wù)觸發(fā)腳本執(zhí)行,這個(gè)腳本給了一個(gè)2010/11/15,看起來沒任何問題,但是不巧這臺(tái)應(yīng)用服務(wù)器的Oracle客戶端的NLS_LANGUAGE=AMERICAN,真是無巧不成書啊,當(dāng)Oracle做這樣一個(gè)調(diào)用前的參數(shù)轉(zhuǎn)換工作的時(shí)候 date_v date; date_v := '2010/11/16'(這個(gè)轉(zhuǎn)換是默認(rèn)的不可控的);災(zāi)難來臨了。

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

 有人會(huì)說,調(diào)用存儲(chǔ)的人傳了個(gè)2010¥/11……/16!怎么辦,你的yyyy/mm/dd如何處理?當(dāng)然沒法處理,我的方法是給出一個(gè)準(zhǔn)確的文檔告訴對(duì)方參數(shù)應(yīng)該是什么格式的,出錯(cuò)了也可以排除責(zé)任了。 另外我自己轉(zhuǎn)換可以添加一些異常機(jī)制來提示問題,Oracle自動(dòng)轉(zhuǎn)換出錯(cuò)了可是很霸道的。

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

【編輯推薦】

  1. Oracle 數(shù)據(jù)集成的實(shí)際解決方案
  2. 對(duì)Oracle Raw常見類型的解釋
  3. Oracle歸檔模式的相關(guān)切換的實(shí)際操作步驟
  4. 細(xì)數(shù)你應(yīng)該修煉的Oracle基本功
  5. Oracle修改字段類型2種方案介紹

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

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

2012-04-19 11:40:21

Titanium

2009-08-25 10:44:50

C#實(shí)現(xiàn)多語言

2011-08-05 17:54:33

Cocoa Touch 多語言

2014-07-09 09:20:06

WPFWPF應(yīng)用

2024-05-09 08:14:09

系統(tǒng)設(shè)計(jì)語言多語言

2022-08-09 07:22:15

語言數(shù)據(jù)庫程序

2023-08-04 10:18:15

2021-06-29 21:48:32

開源語言架構(gòu)

2021-09-07 10:17:35

iOS多語言適配設(shè)計(jì)

2009-08-03 17:33:01

ASP.NET多語言支

2021-07-07 17:25:08

模型人工智能翻譯

2021-07-24 11:41:42

前端開發(fā)技術(shù)

2009-07-17 10:02:29

WPF程序多語言支持

2020-04-14 09:50:02

2009-08-21 18:46:30

下載Server 20

2019-08-22 10:20:41

Ubuntu設(shè)置語言

2022-10-27 22:11:40

react擴(kuò)展庫語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)