【正文】
IF @offset = 0 BEGIN SET @offset=@offset+@yDays SET @i=@i1 END 確定農(nóng)歷年結(jié)束 SET @YEAR=@i 確定農(nóng)歷月開始 SET @i = 1 SELECT @iLunar=dataInt FROM SolarData WHERE yearId=@YEAR 判斷那個(gè)月是潤月 SET @mLeap = @iLunar amp。 15 SET @bLeap = 0 WHILE @i 13 AND @offset 0 BEGIN 判斷潤月 SET @mDays=0 IF (@mLeap 0 AND @i = (@mLeap+1) AND @bLeap=0) BEGIN是潤月 SET @i=@i1 SET @bLeap=1 傳回農(nóng)歷年閏月的天數(shù) IF @iLunar amp。 65536 0 SET @mDays = 30 ELSE SET @mDays = 29 END ELSE 不是潤月 BEGIN SET @j=1 SET @temp = 65536 WHILE @j=@i BEGIN SET @temp=@temp/2 SET @j=@j+1 END IF @iLunar amp。 @temp 0 SET @mDays = 30 ELSE SET @mDays = 29 END 解除閏月 IF @bLeap=1 AND @i= (@mLeap+1) SET @bLeap=0 SET @offset=@offset@mDays SET @i=@i+1 END IF @offset = 0 BEGIN SET @offset=@offset+@mDays SET @i=@i1 END 確定農(nóng)歷月結(jié)束 SET @MONTH=@i 確定農(nóng)歷日結(jié)束 SET @DAY=@offset SET @OUTPUTDATE=convert(varchar(10),CAST((CAST(@YEAR AS VARCHAR(4))+39。39。+CAST(@MONTH AS VARCHAR(2))+39。39。+CAST(@DAY AS VARCHAR(2))) AS DATETIME) ,120) select convert( varchar(10),@solarDay ,120) as 陽歷 ,cast((year(@OUTPUTDATE)) as varchar(8))+39。年|39。 + case when datalength((month(@OUTPUTDATE)))=4 then case when left((month(@OUTPUTDATE)),1)39。一39。 then left(month(@OUTPUTDATE),1) else 39。39。 end + 39。十39。+ case when right((month(@OUTPUTDATE)),1)=39。零39。 then 39。39。 else right((month(@OUTPUTDATE)),1) end else cast((month(@OUTPUTDATE)) as varchar(4)) end +39。月|39。 + case when datalength((day(@OUTPUTDATE)))=4 then case when cast((day(@OUTPUTDATE) )as varchar(4))=39。一零39。then 39。初39。 else (case when left(cast((day(@OUTPUTDATE) )as varchar(4)),1)39。一39。 then left(cast((day(@OUTPUTDATE) )as varchar(4)),1) else 39。39。 end)end +39。十39。+ case when right(cast((day(@OUTPUTDATE) )as varchar(4)),1)=39。零39。 then 39。39。 else right(cast((day(@OUTPUTDATE) )as varchar(4)),1)end else 39。初39。 +cast((day(@OUTPUTDATE) )as varchar(4)) end as 陰歷GO調(diào)用存儲(chǔ)過程 exec GetLunar_zhangzs 39。2010022839。返回結(jié)果:陽歷 陰歷 20100228 二零一零年|一月|十五 正月十五(元宵節(jié))干支計(jì)算方法:CREATE OR REPLACE Type gzType as object( id number(3), gz nchar(2))CREATE OR REPLACE Type gzTableType as table of gzType:create or replace function getGzDatareturn gzTableType PIPELINED 將管道與一個(gè)table對(duì)象MsgType關(guān)聯(lián)as Type myTg is varray(10) of nchar(1)。 Type myDz is varray(12) of nchar(1)。 tg myTg:=myTg(39。甲39。,39。乙39。,39。丙39。,39。丁39。,39。戊39。,39。己39。,39。庚39。,39。辛39。,39。壬39。,39。癸39。)。 dz myDz:=myDz(39。子39。,39。丑39。,39。寅39。,39。卯39。,39。辰39。,39。巳39。,39。午39。,39。未39。,39。申39。,39。酉39。,39。戌39。,39。亥39。)。 indexTg integer:=0。 indexDz integer:=0。 t nchar(2)。begin for i in 1 .. 60 loop t:=tg(indexTg+1) || dz(indexDz+1)。 pipe row(gzType(i,t))。 indexTg:=mod((indexTg+1),10)。 調(diào)整天干索引 indexDz:=mod((indexDz+1),12)。 調(diào)整地支索引 end loop。 return。 必須返回39???9。end。:create or replace function getGzData2return gzTableType as Type myTg is varray(10) of nchar(1)。 Type myDz is varray(12) of nchar(1)。 tg myTg:=myTg(39。甲39。,39。乙39。,39。丙39。,39。丁39。,39。戊39。,39。己39。,39。庚39。,39。辛39。,39。壬39。,39。癸39。)。 dz myDz:=myDz(39。子39。,39。丑39。,39。寅39。,39。卯39。,39。辰39。,39。巳39。,39。午39。,39。未39。,39。申39。,39。酉39。,39。戌39。,39。亥39。)。 indexTg integer:=0。 indexDz integer:=0。 t nchar(2)。 v_result gzTableType:=gzTableType()。 實(shí)例化對(duì)象begin for i in 1 .. 60 loop t:=tg(indexTg+1) || dz(indexDz+1)。 pipe row(gzType(i,t))。 增加的元素賦值,如果沒用EXTEND,這里會(huì)出錯(cuò) ()。 增加一個(gè)元素 v_result() := gzType(i,t)。 為新增加的元素賦值 indexTg:=mod((indexTg+1),10)。 調(diào)整天干索引 indexDz:=mod((indexDz+1),12)。 調(diào)整地支索引 end loop。 return v_result。 必須返回end。oracle10g實(shí)現(xiàn)把漢字轉(zhuǎn)換成漢語拼音首字母第一步、創(chuàng)建java源create or replace and resolve java source named hz2pyas public class hz2py { public static int pare(string str1, string str2) { int result = 0。 string m_s1 = null。 string m_s2 = null。 try {m_s1 = new string((_fromencode_), _toencode_)。m_s2 = new string((_fromencode_), _toencode_)。 } catch(exception e) {return (str2)。 } result = chinesepareto(m_s1, m_s2)。 return result。 } public static int getcharcode(string s) { if(s == null amp。amp。 ())return 1。 byte b[] = ()。 int value = 0。 for(int i = 0。 i amp。amp。 i = 2。 i++)value = value * 100 + b[i]。 return value。 } public static int chinesepareto(string s1, string s2) { int len1 = ()。 int len2 = ()。 int n = (len1, len2)。 for(int i = 0。 i n。 i++) {int s1_code = getcharcode((i) + )。int s2_code = getcharcode((i) + )。if(s1_code * s2_code 0) return (s1_code, s2_code)。if(s1_code != s2_code) return s1_code s2_code。 } return len1 len2。 } public static string getbegincharacter(string res) { string a = res。 string result = 。 for(int i = 0。 i ()。 i++) {string current = (i, i + 1)。if(pare(current, \u554a) 0) result = result + current。elseif(pare(current, \u554a) = 0 amp。amp。 pare(current, \u5ea7) = 0) if(pare(current, \u531d) = 0) result = result + z。 else if(pare(current, \u538b)