mssql Server中的日期與時間函數
1. 當前系統日期、時間
select getdate()
2. dateadd 在向指定日期加上一段時間的基礎上,返回新的 datetime 值
例如:向日期加上2天
select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000
3. datediff 返回跨兩個指定日期的日期和時間邊界數。
select datediff(day,'2004-09-01','2004-09-18') --返回:17
4. datepart 返回代表指定日期的指定日期部分的整數。
SELECT DATEPART(month, '2004-10-15') --返回 10
5. datename 返回代表指定日期的指定日期部分的字符串
SELECT datename(weekday, '2004-10-15') --返回:星期五
6. day(), month(),year() --可以與datepart對照一下
select 當前日期=convert(varchar(10),getdate(),120)
,當前時間=convert(varchar(8),getdate(),114)
select datename(dw,'2004-10-15')
select 本年第多少周=datename(week,'2004-10-15')
,今天是周幾=datename(weekday,'2004-10-15')
函數 參數/功能
GetDate( ) 返回系統目前的日期與時間
DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 與date1兩個日期之間的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date) 返回日期date中,interval指定部分所對應的整數值
DateName (interval,date) 返回日期date中,interval指定部分所對應的字符串名稱
參數 interval的設定值如下:
值 縮 寫(Sql Server) (Access 和 ASP) 說明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q 季 1 ~ 4
Month Mm m 月1 ~ 12
Day of year Dy y 一年的日數,一年中的第幾日 1-366
Day Dd d 日,1-31
Weekday Dw w 一周的日數,一周中的第幾日 1-7
Week Wk ww 周,一年中的第幾周 0 ~ 51
Hour Hh h 時0 ~ 23
Minute Mi n 分鐘0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999
access 和 asp 中用date()和now()取得系統日期時間;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,這些函數的用法也類似
舉例:
1.GetDate() 用于sql server :select GetDate()
2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值為 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值為 5 天
3.DatePart('w','2005-7-25 22:56:32')返回值為 2 即星期一(周日為1,周六為7)
DatePart('d','2005-7-25 22:56:32')返回值為 25即25號
DatePart('y','2005-7-25 22:56:32')返回值為 206即這一年中第206天
DatePart('yyyy','2005-7-25 22:56:32')返回值為 2005即2005年
1、一個年輕人,如果三年的時間里,沒有任何想法,他這一生,就基本這個樣子,沒有多大改變了。
2、成功者就是膽識加魄力,曾經在火車上聽人談起過溫州人的成功,說了這么三個字,“膽子大”。這其實,就是膽識,而拿得起,放得下,就是魄力。
3、這個世界,有這么一小撮的人,打開報紙,是他們的消息,打開電視,是他們的消息,街頭巷尾,議論的是他們的消息,仿佛世界是為他們準備的,他們能夠呼風喚雨,無所不能。你的目標,應該是努力成為這一小撮人。
4、如果,你真的愛你的爸媽,愛你的女朋友,就好好的去奮斗,去拼搏吧,這樣,你才有能力,有經濟條件,有自由時間,去陪他們,去好好愛他們。
5、這個社會,是快魚吃慢魚,而不是慢魚吃快魚。
6、這個社會,是贏家通吃,輸者一無所有,社會,永遠都是只以成敗論英雄。
7、如果你問周圍朋友詞語,如果十個人,九個人說不知道,那么,這是一個機遇,如果十個人,就個人都知道了,就是一個行業。
8、任何一個行業,一個市場,都是先來的有肉吃,后來的湯都沒的喝。
9、這個世界上,一流的人才,可以把三流項目做成二流或更好,但是,三流人才,會把一流項目,做的還不如三流。
10、趁著年輕,多出去走走看看。讀萬卷書,不如行萬里路,行萬里路,不如閱人無數。
11、與人交往的時候,多聽少說。這就是,上帝為什么給我們一個嘴巴兩個耳朵的原因。
12、日常工作之外應當多注意自身修養的提高及自身技能的培訓。隨著計算機技術的廣泛應用,為了不被社會所淘汰,就必須加強計算機技術的培訓與提高。無論是企業培訓還是個人培訓都是不可或缺的,我個人推薦一個很好的培訓機構:中科院計算所培訓中心。
13、不要裝大,對于裝大的人,最好的辦法就是,撿塊磚頭,悄悄跟上去,一下子從背后放倒他。
14、不要隨便說臟話,這會讓別人覺得你沒涵養,不大愿意和你交往。即使交往,也是敷衍。因為他內心認定你素質很差。
15、想要抽煙的時候,先問下周圍的人可不可以,要學會尊重別人。少在女生面前耍酷抽煙,你不知道,其實她們內心很反感。
16、買衣服的時候,要自己去挑,不要讓家人給你買,雖然你第一第二次買的都不怎么樣,可是,你會慢慢有眼光的。
17、要想進步,就只有吸取教訓,成功的經驗都是歪曲的,成功了,想怎么說都可以,失敗者沒有發言權,可是,你可以通過他的事例反思,總結。教訓,不僅要從自己身上吸取,還要從別人身上吸取。
18、學習,學習,再學習,有事沒事,去書店看看書,關于管理,金融,營銷,人際交往,未來趨勢等這些,你能獲得很多。這個社會競爭太激烈了,你不學習,就會被淘汰。中國2008底,有一百多萬大學生找不到工作。競爭這么激烈,所以,一定要認識一點,大學畢業了,不是學習結束了,而是學習剛剛開始。還有,我個人推薦一個很好的視頻節目,《誰來一起午餐》。
19、如果你不是歌手,不是畫家,也不是玩行為藝術的,那么,請在平時注意你的衣著。現在這個社會,衣著能表現出你屬于哪一個群體,哪一個圈子。
20、記住,平均每天看電視超過三個小時以上的,一定都是那些月收入不超過兩千元的,如果你想要月收入超過兩千,請不要把時間浪費在電視上。同樣的道理,那些平均每天玩網絡游戲或聊天超過三個小時以上的,也都是那些月收入不超過兩千的。
21、因為窮人很多,并且窮人沒有錢,所以,他們才會在網絡上聊天抱怨,消磨時間。你有見過哪個企業老總或主管經理有事沒事經常在QQ群里閑聊的?
22、無論你以后是不是從事銷售部門,都看一下關于營銷的書籍。因為,生活中,你處處都是在向別人推銷展示你自己。
23、平時的時候,多和你的朋友溝通交流一下,不要等到需要朋友的幫助時,才想到要和他們聯系,到了社會,你才會知道,能夠認識一個真正的朋友,有多難?
24、如果你想知道自己將來的年收入如何。找你最經常來往的六個朋友,把他們的年收入加起來,除以六,就差不多是你的了。這個例子,可以充分的說明一點,物以類聚。
25、不要聽信身邊人的話,大一不談戀愛,好的女孩子就被別人都挑走了。想想,剛上大一就耐不住寂寞,受不住誘惑,而去談戀愛的女孩子,值得自己去追嗎?大學里,可以有一場愛情,可是,不要固執地認為,剛上大一,就必須要談戀愛。
26、記得,要做最后出牌的人,出讓別人覺得出其不意的牌,在他們以為你要輸掉的時候,這樣,你才能贏得牌局。
27、關于愛情,有這么一句話,沒有面包,怎么跳舞?無論什么時候,你決定去好好愛一個人的時候,一定要考慮給她你能給予的最好的物質生活。
28、給自己定一個五年的目標,然后,把它分解成一年一年,半年半年的,三個月的,一個月的。這樣,你才能找到自己的目標和方向。
29、無論什么時候,記住尊嚴這兩個字,做人是要有尊嚴,有原則,有底線的。否則,沒有人會尊重你。
30、如果,我只能送你一句忠告,那就是,這個世界上沒有免費的午餐,永遠不要走捷徑!
我身邊我認為的好男人基本上都是單身,很多大都還沒談過戀愛。另外我熟悉的人中,很多人品好,工作優秀,被大家公認為的好男人的妻子卻很一般。經過和朋友的交流和自己的分析,我得出了中國好男人娶不到好女人的幾點原因。
首先我要說一下我眼中的好男人具有的一些品質:待人好,誠信,重情義;有進取心,有胸懷,事業心強;負責任,重承諾,有愛心。
現在我發現正是因為他們具有這些品質而導致了他們娶不到好女人,我也體會到了大家常說的一些話的深刻道理。
“男人不壞,女人不愛”,以前我想不通這句話的道理,現在發現現實的確是這樣的。女人大都想找個好男人,然而她們往往找到的是會討好她們的男人。好男人往往不會討好女人,他們太實在,太負責任,太重承諾,他們不會隨便地對他們喜歡的女人表示愛意。而壞男人則不同,他們“既有色心,又有色膽”,為了得到他們心目中的女人,他們可以偽裝,偽裝成好男人,百般討好女人,甜言蜜語,花前月下,酒吧電影院……
我在網上看到一個網友的話:“經過這幾場戀愛,我只能這樣說了,不“色”不知道,一“色”準會讓你得到你想得到的一切。”我們不妨比較一下劉德華和陳冠希就明白了他說的話很有道理。壞男人的偽裝是有一定時間限度的,等他們得到女人后,他們便會慢慢地顯露出真實的面目。如果有一天他們又有了新的目標,或著把女人玩膩了,便會把她們甩了。而女人這時只能流著淚說:“世上的男人沒一個好東西!”
美女往往和野獸在一起”,大部分的年輕人談戀愛時總是會在乎一下容貌的,這一點無可厚非,因為追求美是人的本性。現在我發現美女和野獸在一起是“最安全”的。美女就像一只羔羊,如果她的男友也像一只善良的羔羊,或者老實的黃牛,即使他們結了婚,美女也有可能被很多“色狼”盯著,這些“色狼”一旦惦記上美女,便會使用各種辦法偽裝自己,最終可能把自己偽裝成一只“披著羊皮的狼”,美女最終往往成為了他們的“獵物”。而狼的獵物往往是最安全的,因為很少有其它的動物敢去搶狼的東西。
其實總結一下上面的分析,可以得出一條結論:中國的好男人娶不到好女人,最重要的原因是他們在愛情面前不夠主動。
不主動主要有以下幾個原因:
第一,他們想的總是太多,他們可能覺得自己現在沒有戀愛的資本,不能在物質上滿足女孩;
第二,他們太負責任,太重承諾,所以他們不會隨便地對一個女孩說“我愛你”,因為他們覺得愛是一種責任,一種承諾,有時候他們對女孩的愛意可能會讓女孩覺察不出來。
第三,好男人總是會有女人喜歡的,這會讓他們有優越感,而好女人也會有更多的男人去追,她們也會更有優越感,兩種有優越感的人往往因為這種優越感而不肯“屈服”于對方,男的不會很主動,女的更不會主動。
第四,
好男人也許以前主動地追求過自己心目中的女人,但那個女人卻沒有對男人表示出愛意,這讓好男人心里會產生失落感,他們可能會因此對愛情很失望,所以以后即使心目中的好女人再次出現的時候他們也不會像以前那樣主動了。
當然也有好男人和好女人走在了一起,但是這樣的非常少,至少我發現是這樣的。
當美和丑相遇的時候,受欺騙的首先是美,因為它叫美,但丑最終會暴露出它丑陋的嘴臉,因為它叫丑;當善與惡相遇的時候,受傷害的首先是善,因為它叫善,但惡最終會顯現出它惡的本性,因為它叫惡。所以美與丑,善與惡有時候經常在一起,但不會長久;好女人也經常和壞男人在一起,他們的關系也不會長久。
世間存在著太多的不完美,太多的不盡人意,而我們往往抱著追求完美的態度,可到后來卻往往被現實打擊的心灰意冷。
好男人如果想娶到好女人,還是要主動一些,因為你們畢竟是個男人;好女人如果想嫁個好男人,還是要擦亮眼睛,因為你們往往被你們看到的表象所欺騙。
之所以要在男人前加中國二字,是因為其它國家的好男人是不是和中國的好男人一樣娶不到好女人,我不清楚,不了解就沒有發言權
男人不壞,女人不愛。這句話在現實中非常準確。雖然很多女人會矢口否認這一點甚至對此嗤之以鼻。但實際上,壞男人的求愛方式的確比好男人的方式有效得多。
壞男人的特點是:臉皮厚,大膽,善于撒謊,不太受道德約束,花招詭計多,一旦有機會“日”后再說,不負責任。而這些特點恰恰擊中了女人的軟肋。
假設硬件條件相似的好男人和壞男人遇到同一個女人,壞男人的殺傷力要強出N倍。
首先,好男人的出手概率要小得多,因為好男人開始追求之前就要考慮負責任的問題,所以不完全中意的不會去追,條件不成熟的目前不能追,對方已有男友的不能追,未來前景不看好(例:在不同城市)的不能追,限制極多。而壞男人反正也沒打算負責任,只要對方有點姿色,或是觸手可得,一概先追了再說。
第二,好男人誠實,沒錢沒關系就實話實說,對女方的缺點也坦誠相告,往往讓女人很失望。而壞男人隨便編兩個故事就可以顯得自己實力超群;對女人花言巧語又很容易讓她們心花怒放,認為找到了知己伯樂。在這個浮躁的社會背景下,好男人多年的辛苦努力換來的成果多半還不如一個壞男人用3分鐘時間編出來的故事更能讓女人心動。
第三,好男人總想著尊重對方,不會找機會調戲非禮。而壞男人通過調笑,酒精,跳舞等方式隨時刺激女人的荷爾蒙,一有機會就把對方占為己有。女人的快感一旦被調動起來,反而很快會愛上這個男人。壞男人一次嘿咻的效果往往超過好男人默默的多次付出。有些傻女人認為男人上了她就是愛上了她;更傻的女人認為一旦被男人上了,她就必須愛上這個男人。女人的本性中隱含著逆來順受的基因。
第四,好男人真心付出,把雙方的感情看得很重,心態容易不平衡,為一些小事和女友爭吵。而壞男人心想:反正我不過是做一場游戲,找點刺激罷了,哄哄她得了,生個什么氣啊?心態更平和,反而顯得成熟個性好。
第五,壞男人的約會經驗通常比好男人多得多。參照第一條,壞男人一有機會就出手,即使不成功也積累了經驗,逐漸了解了女人的心理。女人大多不理智,有種種莫名其妙完全不合邏輯的偏見(比如:一個鞋上有污點的男人一定***不住)。壞男人通過大量的實戰經驗在約會時把這些表面工作做得很好,而好男人卻懵然不知,被唰了都不明白為什么,還以為是自己實力不夠。
第六,雙方發生爭執時,好男人自尊心,原則性強,不會輕易遷就對方,往往為些小事誰都不讓步,最后只能分手。而壞男人臉皮厚,認個錯比喝稀飯都容易,往往輕而易舉就能哄得對方回心轉意;當然,那是在他還沒有玩膩的時候,否則即使女方讓步他也能找出借口分手,有時候女人反而會一再讓步,徹底淪為壞男人的玩物。
第七,好男人原則性強,循規蹈矩,往往顯得乏味。而壞男人一心追求刺激,變化多端,常常給女人以新鮮感。不知不覺中,女人就被壞男人迷惑住,控制住了。
第八,如果女人認識到雙方不合適,提出主動分手。好男人只會采取光明正大的手段,實際效果有限;而壞男人可以不擇手段,死纏濫打,威逼利誘。女人的惰性強,情感多變,又容易向強勢低頭,常常擺脫不了壞男人的下三濫手段。
大部分女人虛榮心、自尊心很強,喜歡甜言蜜語,對生活的期望值不現實
1、 染料漬的去除
染料弄到了衣物上,可先用稀醋酸擦拭,然后再用雙氧水漂洗。也可以用松節油刷洗后,再用汽油擦拭。最后都要用清水漂凈。
2、紅墨水漬的去除
新染上的紅墨水漬可先水洗,然后放入溫熱的皂液中浸泡,待色漬去掉后,再用清水漂亮洗干凈。污染時間較長的紅墨水漬,先用 水洗后,再用10%的酒精水溶液擦拭去除。
3、藍墨水漬的去除
新沾污的藍墨水漬可用肥皂,洗衣粉等洗滌劑搓洗去除。污染時間較長的藍墨水漬,可用草酸溶液浸泡后搓洗,然后再用洗滌劑清洗 去除。
4、紅藥水漬的去除
衣物上染上紅藥水,先用溫熱的洗滌劑溶液洗后,接著分別用草酸和高錳酸鉀溶液順次浸泡、搓洗,最后再用草酸溶液脫色,再進行水洗,紅藥水漬即除。
5、紫藥水漬的去除
紫藥水中的主要成分是從龍膽草中提取出來的,所以紫藥水又叫龍膽紫,是常用的外用藥劑,沾在衣物上,青紫顏色,非常顯眼。
去除方法是:把衣物用水浸泡后,稍加擰干,用棉簽蘸上20%的草酸水溶液由里向外涂抹污漬。稍浸片刻后即可用清水反復漂洗、揉搓, 污漬便可去除。 另外,對一些沾染上紫藥水的白色織物,也可先用溶劑酒精除去浮色,再用氧化劑次氯酸鈉或雙氧水溶液進行漂白處理,經水洗后就 能達到預想的效果。
6、黃藥水漬的去除
淺色的尤其是白色的衣物灑上了黃藥水,要除黃藥水漬是比較麻煩的,首先用醋酸滴在污染處,如見效不大,可放在酒精中洗滌。
如果仍不能徹底除掉,就要依據衣物的質料纖維性質選用適合的氧化劑,進行去漬或漂白。
7、碘酒漬的去除
衣物染上碘酒,可以選用酒精或碘化鉀來去除。在100毫升的水中要加5~7克碘化鉀,用碘化鉀溶液去漬后的衣物一定要用清水漂洗干凈。 也可把染上碘的衣物放入熱水或15%~20%濃度的大蘇打(硫代硫酸鈉)熱溶液中浸泡2小時,使污漬徹底溶解而脫離衣物。 還可以用水淀粉漿糊涂在污漬之處,當污處出現黑色時,再用洗滌劑洗滌,最后漂洗干凈即可。
8、藥膏漬的去除
先用溶劑汽油或酒精刷洗后,再用四氯化碳或苯刷洗,最后再用優質洗滌劑清洗干凈。
也可以先用三氯鉀烷刷洗,再用洗滌劑洗滌,最后用清水漂凈。 還可以把加熱后的食用面堿撒在污處,再加些溫水進行揉搓,即可除去。
9、新染上的酒精或啤酒漬
可用清水洗滌去除。時間較長的酒漬,可先用水洗,再用2%的氨水和硼水混合液搓洗去除。去漬后的衣物必須要用清水漂洗干凈。
10、鐵銹漬的去除
衣物上的鐵銹漬,可用1%溫熱的草酸水溶液浸泡后,再用清水漂洗干凈。 也可用15%的醋酸水溶液擦拭污漬,或者將沾污部分浸泡在該溶液里,次日再用清水漂洗干凈。 也可用10%的檸檬酸水溶液或10%的草酸水溶液將污處潤濕,然后浸泡在濃鹽水中,次日再用清水洗滌漂凈。 白色純棉或棉混紡織物沾上了鐵銹,可取一粒草酸放在污漬處,用溫水潤濕,輕輕揉搓,然后再用清水漂洗干凈。在操作中,為了防止 草酸腐蝕織物,操作動作要迅速。 也可用鮮檸檬汁滴在銹漬上,用手揉搓,反復幾次,直到銹漬除去再經洗滌液洗滌后用清水漂凈利。
11、銅綠銹的去除
銅綠有毒,衣物被污染上時要小心處理。其漬可用20%~30%的碘化鉀水溶液或10%的醋酸水溶液熱燜,并要立刻用溫熱的食鹽水擦拭,最后用清水洗凈。
12、硝酸銀漬的去除
硝酸銀在醫藥及感光材料中應用廣泛。這種物質接觸到皮膚或織物上,呈黑色斑點污漬。
除掉方法如下: 用氯化銨和氯化汞各2份,溶液在15份水中制成混合溶液。用棉團蘸上這種混合液擦拭污漬處,污漬即可除去。
還可以將沾有硝酸銀污漬的衣物浸入微熱的10%大蘇打(硫打硫酸鈉)的水溶液中,然后用洗滌劑水洗后,再用清水漂洗干凈。
13、高錳酸鉀漬的去除
高錳酸鉀俗稱灰錳氧,人們常用它來做外科手術器具和水果消毒劑。當衣物上沾染了高錳酸鉀,可維生素C藥片蘸上水,涂在污漬處輕輕 擦拭,邊蘸水邊擦,一會就能將污漬去除。
手上沾染高錳酸鉀污漬,也要用此方法去除。
也可以用檸檬酸或2%的草酸水溶液浸泡,通過化學反應,污漬即可除去。
這種方法適用于各種質料和顏色的衣物去漬。
14、醬油漬的去除
衣物上沾染了醬油漬可用冷水搓洗,再用洗滌劑洗滌。
被醬油污染時間較長的衣物,要在洗滌液中加入適量的氨水( 4 份洗滌溶液中加 入 1 份氨水)進行洗滌。
絲、毛織物可用10%的檸檬酸水溶液進行洗滌。
最后都要用清水漂凈。
15、黃泥漬的去除
衣物染上了黃泥漬,待黃泥漬晾干后,用手搓或用刷子刷去浮土,然后用生姜涂擦污漬處,最后用清水漂洗,黃泥漬即可去除。
16、尿漬的去除
兒童尿巾上的新尿漬可用清水洗凈。干透的舊尿漬需用洗滌劑清洗。如有痕跡,自然纖維絲綢織物,可用氨水和醋酸1:1的混合液洗滌, 最后用清水漂凈。
17、衣物上的汗漬
可用25%濃度的氨氣水水溶液洗滌。也可以先將衣物放在3%濃度的鹽水里浸泡幾分鐘,用清水漂洗凈,再用洗滌劑洗滌。
絲、毛及其混紡織物上的汗漬,可用檸檬酸洗除。最后都要用清水漂洗。 清除汗漬霉斑時,新漬可先用軟刷刷去表面霉斑,再用酒精擦除。
MySQL 字符串函數大全
對于針對字符串位置的操作,第一個位置被標記為1。
ASCII(str)
返回字符串str的最左面字符的ASCII代碼值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
mysql> select ASCII('2');
-> 50
mysql> select ASCII(2);
-> 50
mysql> select ASCII('dx');
-> 100
也可參見ORD()函數。
ORD(str)
如果字符串str最左面字符是一個多字節字符,通過以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代碼值來返回多字節字符代碼。如果最左面的字符不是一個多字節字符。返回與ASCII()函數返回的相同值。
mysql> select ORD('2');
-> 50
CONV(N,from_base,to_base)
在不同的數字基之間變換數字。返回數字N的字符串數字,從from_base基變換為to_base基,如果任何參數是NULL,返回NULL。參數N解釋為一個整數,但是可以指定為一個整數或一個字符串。最小基是2且最大的基是36。如果to_base是一個負數,N被認為是一個有符號數,否則,N被當作無符號數。 CONV以64位點精度工作。
mysql> select CONV("a",16,2);
-> '1010'
mysql> select CONV("6E",18,8);
-> '172'
mysql> select CONV(-17,10,-18);
-> '-H'
mysql> select CONV(10+"10"+'10'+0xa,10,10);
-> '40'
BIN(N)
返回二進制值N的一個字符串表示,在此N是一個長整數(BIGINT)數字,這等價于CONV(N,10,2)。如果N是NULL,返回NULL。
mysql> select BIN(12);
-> '1100'
OCT(N)
返回八進制值N的一個字符串的表示,在此N是一個長整型數字,這等價于CONV(N,10,8)。如果N是NULL,返回NULL。
mysql> select OCT(12);
-> '14'
HEX(N)
返回十六進制值N一個字符串的表示,在此N是一個長整型(BIGINT)數字,這等價于CONV(N,10,16)。如果N是NULL,返回NULL。
mysql> select HEX(255);
-> 'FF'
CHAR(N,...)
CHAR()將參數解釋為整數并且返回由這些整數的ASCII代碼字符組成的一個字符串。NULL值被跳過。
mysql> select CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> select CHAR(77,77.3,'77.3');
-> 'MMM'
CONCAT(str1,str2,...)
返回來自于參數連結的字符串。如果任何參數是NULL,返回NULL。可以有超過2個的參數。一個數字參數被變換為等價的字符串形式。
mysql> select CONCAT('My', 'S', 'QL');
-> 'MySQL'
mysql> select CONCAT('My', NULL, 'QL');
-> NULL
mysql> select CONCAT(14.3);
-> '14.3'
LENGTH(str)
OCTET_LENGTH(str)
CHAR_LENGTH(str)
CHARACTER_LENGTH(str)
返回字符串str的長度。
mysql> select LENGTH('text');
-> 4
mysql> select OCTET_LENGTH('text');
-> 4
注意,對于多字節字符,其CHAR_LENGTH()僅計算一次。
LOCATE(substr,str)
POSITION(substr IN str)
返回子串substr在字符串str第一個出現的位置,如果substr不是在str里面,返回0.
mysql> select LOCATE('bar', 'foobarbar');
-> 4
mysql> select LOCATE('xbar', 'foobar');
-> 0
該函數是多字節可靠的。
LOCATE(substr,str,pos)
返回子串substr在字符串str第一個出現的位置,從位置pos開始。如果substr不是在str里面,返回0。
mysql> select LOCATE('bar', 'foobarbar',5);
-> 7
這函數是多字節可靠的。
INSTR(str,substr)
返回子串substr在字符串str中的第一個出現的位置。這與有2個參數形式的LOCATE()相同,除了參數被顛倒。
mysql> select INSTR('foobarbar', 'bar');
-> 4
mysql> select INSTR('xbar', 'foobar');
-> 0
這函數是多字節可靠的。
LPAD(str,len,padstr)
返回字符串str,左面用字符串padstr填補直到str是len個字符長。
mysql> select LPAD('hi',4,'??');
-> '??hi'
RPAD(str,len,padstr)
返回字符串str,右面用字符串padstr填補直到str是len個字符長。
mysql> select RPAD('hi',5,'?');
-> 'hi???'
LEFT(str,len)
返回字符串str的最左面len個字符。
mysql> select LEFT('foobarbar', 5);
-> 'fooba'
該函數是多字節可靠的。
RIGHT(str,len)
返回字符串str的最右面len個字符。
mysql> select RIGHT('foobarbar', 4);
-> 'rbar'
該函數是多字節可靠的。
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
MID(str,pos,len)
從字符串str返回一個len個字符的子串,從位置pos開始。使用FROM的變種形式是ANSI SQL92語法。
mysql> select SUBSTRING('Quadratically',5,6);
-> 'ratica'
該函數是多字節可靠的。
SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
從字符串str的起始位置pos返回一個子串。
mysql> select SUBSTRING('Quadratically',5);
-> 'ratically'
mysql> select SUBSTRING('foobarbar' FROM 4);
-> 'barbar'
該函數是多字節可靠的。
SUBSTRING_INDEX(str,delim,count)
返回從字符串str的第count個出現的分隔符delim之后的子串。如果count是正數,返回最后的分隔符到左邊(從左邊數) 的所有字符。如果count是負數,返回最后的分隔符到右邊的所有字符(從右邊數)。
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
該函數對多字節是可靠的。
LTRIM(str)
返回刪除了其前置空格字符的字符串str。
mysql> select LTRIM(' barbar');
-> 'barbar'
RTRIM(str)
返回刪除了其拖后空格字符的字符串str。
mysql> select RTRIM('barbar ');
-> 'barbar'
該函數對多字節是可靠的。
TRIM([[BOTH | LEA
DING | TRAILING] [remstr] FROM] str)
返回字符串str,其所有remstr前綴或后綴被刪除了。如果沒有修飾符BOTH、LEADING或TRAILING給出,BOTH被假定。如果remstr沒被指定,空格被刪除。
mysql> select TRIM(' bar ');
-> 'bar'
mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx'
mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');
-> 'bar'
mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');
-> 'barx'
該函數對多字節是可靠的。
SOUNDEX(str)
返回str的一個同音字符串。聽起來“大致相同”的2個字符串應該有相同的同音字符串。一個“標準”的同音字符串長是4個字符,但是SOUNDEX()函數返回一個任意長的字符串。你可以在結果上使用SUBSTRING()得到一個“標準”的同音串。所有非數字字母字符在給定的字符串中被忽略。所有在A-Z之外的字符國際字母被當作元音。
mysql> select SOUNDEX('Hello');
-> 'H400'
mysql> select SOUNDEX('Quadratically');
-> 'Q36324'
SPACE(N)
返回由N個空格字符組成的一個字符串。
mysql> select SPACE(6);
-> ' '
REPLACE(str,from_str,to_str)
返回字符串str,其字符串from_str的所有出現由字符串to_str代替。
mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
該函數對多字節是可靠的。
REPEAT(str,count)
返回由重復countTimes次的字符串str組成的一個字符串。如果count <= 0,返回一個空字符串。如果str或count是NULL,返回NULL。
mysql> select REPEAT('MySQL', 3);
-> 'MySQLMySQLMySQL'
REVERSE(str)
返回顛倒字符順序的字符串str。
mysql> select REVERSE('abc');
-> 'cba'
該函數對多字節可靠的。
INSERT(str,pos,len,newstr)
返回字符串str,在位置pos起始的子串且len個字符長得子串由字符串newstr代替。
mysql> select INSERT('Quadratic', 3, 4, 'What');
-> 'QuWhattic'
該函數對多字節是可靠的。
ELT(N,str1,str2,str3,...)
如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于參數個數,返回NULL。ELT()是FIELD()反運算。
mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej'
mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
FIELD(str,str1,str2,str3,...)
返回str在str1, str2, str3, ...清單的索引。如果str沒找到,返回0。FIELD()是ELT()反運算。
mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2
mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0
FIND_IN_SET(str,strlist)
如果字符串str在由N子串組成的表strlist之中,返回一個1到N的值。一個字符串表是被“,”分隔的子串組成的一個字符串。如果第一個參數是一個常數字符串并且第二個參數是一種類型為SET的列,FIND_IN_SET()函數被優化而使用位運算!如果str不是在strlist里面或如果 strlist是空字符串,返回0。如果任何一個參數是NULL,返回NULL。如果第一個參數包含一個“,”,該函數將工作不正常。
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
MAKE_SET(bits,str1,str2,...)
返回一個集合 (包含由“,”字符分隔的子串組成的一個字符串),由相應的位在bits集合中的的字符串組成。str1對應于位0,str2對應位1,等等。在str1, str2, ...中的NULL串不添加到結果中。
mysql> SELECT MAKE_SET(1,'a','b','c');
-> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
-> 'hello,world'
mysql> SELECT MAKE_SET(0,'a','b','c');
-> ''
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
返回一個字符串,在這里對于在“bits”中設定每一位,你得到一個“on”字符串,并且對于每個復位(reset)的位,你得到一個“off”字符串。每個字符串用“separator”分隔(缺省“,”),并且只有“bits”的“number_of_bits” (缺省64)位被使用。
mysql> select EXPORT_SET(5,'Y','N',',',4)
-> Y,N,Y,N
LCASE(str)
LOWER(str)
返回字符串str,根據當前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成小寫。該函數對多字節是可靠的。
mysql> select LCASE('QUADRATICALLY');
-> 'quadratically'
UCASE(str)
UPPER(str)
返回字符串str,根據當前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成大寫。該函數對多字節是可靠的。
mysql> select UCASE('Hej');
-> 'HEJ'
該函數對多字節是可靠的。
LOAD_FILE(file_name)
讀入文件并且作為一個字符串返回文件內容。文件必須在服務器上,你必須指定到文件的完整路徑名,而且你必須有file權限。文件必須所有內容都是可讀的并且小于max_allowed_packet。如果文件不存在或由于上面原因之一不能被讀出,函數返回NULL。
mysql> UPDATE table_name
SET blob_column=LOAD_FILE("/tmp/picture")
WHERE id=1;
MySQL必要時自動變換數字為字符串,并且反過來也如此:
mysql> SELECT 1+"1";
-> 2
mysql> SELECT CONCAT(2,' test');
-> '2 test'
如果你想要明確地變換一個數字到一個字符串,把它作為參數傳遞到CONCAT()。
如果字符串函數提供一個二進制字符串作為參數,結果字符串也是一個二進制字符串。被變換到一個字符串的數字被當作是一個二進制字符串。這僅影響比較 .
本文來自: 腳本之家(www.jb51.net) 詳細出處參考:http://www.jb51.net/article/19437.htm
將excel數據導入oracle中
http://www.douzhe.com/docs/bbsjh/8/3383.html 這個帖子的討論,整理如下:
A、有一個比較麻煩但保證成功的方法。
1、在本地創建一個Access數據庫,將Excel數據先導入到Access。可直接導入點擊鼠標右鍵,選擇導入,文件類型選擇要導入的Excel文件,也可通過創建宏用TransferSpreadsheet函數實現。
2、在本地創建ODBC,鏈接oracle數據庫。將oracle中需要導入數據的表以鏈接表的方式在本地Access中創建(千萬不要使用導入表)。
3、在Access數據庫中創建插入查詢將導入好的Excel數據導入到oracle中。
此方法保證成功。
B、也可以導入sql server 用它的導出工具導入oracle 但對一些image字段支持不好,你如果
沒這種字段就行。
用MS_sqlserver 提供的數據導出導入功能可以方便的把excel方便的導入oracle數據庫
C、一種方法:
先把Excel另存為.csv格式文件,如test.csv,再編寫一個insert.ctl
用sqlldr進行導入!
insert.ctl內容如下:
load data --1、控制文件標識
infile 'test.csv' --2、要輸入的數據文件名為test.csv
append into table table_name --3、向表table_name中追加記錄
fields terminated by ',' --4、字段終止于',',是一個逗號
(field1,
field2,
field3,
...
fieldn)-----定義列對應順序
注意括號中field排列順序要與csv文件中相對應
然后就可以執行如下命令:
sqlldr user/password control=insert.ctl
有關SQLLDR的問題
控制文件:input.ctl,內容如下:
load data --1、控制文件標識
infile 'test.txt' --2、要輸入的數據文件名為test.txt
append into table test --3、向表test中追加記錄
fields terminated by X'09' --4、字段終止于X'09',是一個制表符(TAB)
(id,username,password,sj) -----定義列對應順序
其中append為數據裝載方式,還有其他選項:
a、insert,為缺省方式,在數據裝載開始時要求表為空
b、append,在表中追加新記錄
c、replace,刪除舊記錄,替換成新裝載的記錄
d、truncate,同上
問題:SQLLDR能不能保留表中原有的數據,如果發現KEY重復時,再UPDATE對應的記錄?
D、先?EXCEL文件??成TXT文件
再使用SQLLOADER
E、將EXCEL文件保存成*.csv格式. 然后用sqlload來導入表中.
sqlload是Oracle自帶的數據倒入工具,應該是沒有可視化工具的(至少我一直用命令行)。
直接在命令行下敲入sqlldr即可得到幫助。
F、如果你的單個文件不大的情況下(少于100000行), 可以全選COPY ,然后用PL/SQL.:
select * from table for update. 然后打開鎖, 再按一下加號. 鼠標點到第一個空格然后粘貼. COMMIT即可.(小竅門, ORACLE不支持的, 但很好用, 不會有問題)
G、Golden的imp/exp工具可以直接導入文本文件,非常簡單
下面這個不知道是針對以上哪種方法的:
放心:excel文件最多只有65536條記錄
不放心:曾經如此導過,但當有中文字段時可能出現異常(PL/SQL DEV5)
我用的是A,OK,時間倉促,其他的沒有試過。
http://www.itpub.net/101803.html 這個帖子如是說:
你用的方法可能是:
1. 存成txt文件, 再用sql*loader
2. 存成txt文件, 再用第三方工具(如pb, delphi, toad, pl/sql dev等)導入.
sql*loader用起來費勁, 為了小小的需求, 裝一個第三方工具麻煩.
看看我的方法.
比如文件中有id, name兩列(分別為A列和B列), 要導入的表為person(person_id, person_name)
在excel 文件的sheet的最右列, 添加一列, 對應第一行數據的單元格寫入以下內容:
= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"
然后把這一行復制到所有數據行對應的列中.
這一列的內容拷貝出去保存, 即成為可以直接在sql*plus下運行的腳本.
方法一?日期型?位不適用
A、把Excel文件導到Acess里,然后打開要導數據的表。
打開 PLSQL DEV,打開一個SQL窗口,執行
select * from [tab] for update
然后一列一列的從Acess里copy & paste 。
B、excel->copy->pl/sql developer>paste
實際操作時發現,使用 copy / paste 經常會發生莫其妙的問題。尤其是通過 access ( ODBC) copy 入 oracle 時。
EXECL -->SAVE AS *.CSV(COMMA DELIMITED). THEN LOAD IT DIRECTLY.
CTL FILE EXAMPLE
------------
Load Data
INFILE 'E:\AA.csv'
TRUNCATE
INTO TABLE AA
FIELDS TERMINATED BY ','
(A,
B)
C、在ACCESS中將ORACLE TABLE 映射,然后直接插入即可。很方便,也沒發現有數據錯誤問題。
曾經有一個很麻煩的LONG RAW問題,用這個辦法也解決了
D、用SQL*XL就可以直接將EXCEL文件導入ORACLE,很方便的,我一直用SQL*XL。
E、我常用的辦法是從excel中copy到ultraEdit中,然后用列編輯功能加上insert into ....等等,也挺好用
F、用plsql developer,很好用的,直接copy就可以了
在pl/sql developer 中選擇表的多個字段名,然后就可以paste 了
G、用odbc加pb的數據管道可以在不同的數據庫(文本)之間傳輸數據
H、odbc+pb
用不同的odbc驅動程序連接不通的數據庫
然后在pb環境中啟動數據管道,利用數據管道傳輸數據
I、先倒成。DBF的文件,再用DELPHI DATABASE DESKTOP 導入ORACLE很方便的,也且也可以支持空值導入。
http://www.itpub.net/showthread.php?s=7f7b57ea130ab71a3fdad57a71d8f8a1&threadid=97652&perpage=15&pagenumber=2
帖子很長,有空再整理。
人只有兩種清晰的狀態。
醒與睡。
在精神上是一種對峙。
在時間上是一個顛倒。
習慣在子夜時候入睡的一群人,
還有深夜或黎明入睡的一群人。
他們擁有兩種完全不一樣的眼神。
茫然的,困頓的,渙散的。
清晰的,鋒利的,脆弱的。
人還有兩種模糊的狀態。
生與死。
一種人努力的想該如何活著。
另一種人思考著該如何死去。
一種從不放棄,
有著陽光的氣息和溫和的表情。
一種冷漠孤離,
在光怪陸離的夜晚里整理思緒。
他們在那些大大的城市里,
小小的生活著。
伴隨著輕微的喘息,和疲憊的背影。
之后,生活遍體鱗傷。
可那些年華,
從來都不被阻擋。
那些虛度的光陰被時針拖成狹長的陰影。
沉重的蕩在身后。
如果你看的見。
明天的之后還有明天,
要勇敢的過
缺點:
1、可移植性是存儲過程和觸發器最大的缺點。
2、占用服務器端太多的資源,對服務器造成很大的壓力
3、不能做DDL。
4、觸發器排錯困難,而且數據容易造成不一致,后期維護不方便。
優點:
1、預編譯,已優化,效率較高。避免了SQL語句在網絡傳輸然后再解釋的低效率。
2、存儲過程可以重復使用,減少開發人員的工作量。
3、業務邏輯封裝性好,修改方便。
4、安全。不會有SQL語句注入問題存在。
aa.htm是參數輸入界面
bb.htm是參數接收處理界面
aa.htm
<html>
<head>
</head>
<body>
<script>
function submit()
{
var input1 = document.getElementById("inputid");
window.open("b.html?inputStr=" + input1.value);//傳入參數
}
</script>
<input type = "text" id = "inputid">
<input type = "button" onclick = "submit()" value = "提交">
</body>
</html>
bb.htm:
<html>
<head>
<script>
//獲得參數的方法
var request =
{
QueryString : function(val)
{
var uri = window.location.search;
var re = new RegExp("" +val+ "=([^&?]*)", "ig");
return ((uri.match(re))?(uri.match(re)[0].substr(val.length+1)):null);
}
}
</script>
</head>
<body>
<script>
//調用方法獲得參數
var rt = request.QueryString("inputStr");
alert(rt);
</script>
</body>
</html>
MySQL:MySQL日期數據類型、MySQL時間類型使用總結 MySQL 日期類型:日期格式、所占存儲空間、日期范圍 比較。
日期類型 存儲空間 日期格式 日期范圍
------------ --------- --------------------- -----------------------------------------
datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date 3 bytes YYYY-MM-DD 1000-01-01 ~ 9999-12-31
year 1 bytes YYYY 1901 ~ 2155
在 MySQL 中創建表時,對照上面的表格,很容易就能選擇到合適自己的數據類型。不過到底是選擇 datetime 還是 timestamp,可能會有點犯難。這兩個日期時間類型各有優點:datetime 的日期范圍比較大;timestamp 所占存儲空間比較小,只是 datetime 的一半。
另外,timestamp 類型的列還有個特性:默認情況下,在 insert, update 數據時,timestamp 列會自動以當前時間(CURRENT_TIMESTAMP)填充/更新。“自動”的意思就是,你不去管它,MySQL 會替你去處理。
一般情況下,我傾向于使用 datetime 日期類型。
MySQL 時間類型:時間格式、所占存儲空間、時間范圍。
時間類型 存儲空間 時間格式 時間范圍
------------ --------- --------------------- -----------------------------------------
time 3 bytes HH:MM:SS -838:59:59 ~ 838:59:59
time 時間范圍居然有這么大的范圍,特別是 time 可以取負值,有點奇怪。后來,看了 MySQL 手冊才知道這是為了滿足兩個日期時間相減才這樣設計的。
select timediff('2000:01:31 23:59:59', '2000:01:01 00:00:00'); -- 743:59:59
select timediff('2000:01:01 00:00:00', '2000:01:31 23:59:59'); -- -743:59:59
select timediff('23:59:59', '12:00:00'); -- 11:59:59
注意,timediff 的兩個參數只能是 datetime/timestamp, time 類型的,并且這兩個參數類型要相同。即:datetime/timestamp 和 datetime/timestamp 比較;time 和 time 相比較。
雖然 MySQL 中的日期時間類型比較豐富,但遺憾的是,目前(2008-08-08)這些日期時間類型只能支持到秒級別,不支持毫秒、微秒。也沒有產生毫秒的函數。
《MySQL:MySQL日期數據類型、MySQL時間類型使用總結》適用于 MySQL 5.X 及以上版本。
一、MySQL 獲得當前日期時間 函數
1.1 獲得當前日期+時間(date + time)函數:now()
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2008-08-08 22:20:46 |
+---------------------+
除了 now() 函數能獲得當前的日期時間外,MySQL 中還有下面的函數:
current_timestamp()
,current_timestamp
,localtime()
,localtime
,localtimestamp -- (v4.0.6)
,localtimestamp() -- (v4.0.6)
這些日期時間函數,都等同于 now()。鑒于 now() 函數簡短易記,建議總是使用 now() 來替代上面列出的函數。
1.2 獲得當前日期+時間(date + time)函數:sysdate()
sysdate() 日期時間函數跟 now() 類似,不同之處在于:now() 在執行開始時值就得到了, sysdate() 在函數執行時動態得到值。看下面的例子就明白了:
mysql> select now(), sleep(3), now();
+---------------------+----------+---------------------+
| now() | sleep(3) | now() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |
+---------------------+----------+---------------------+
mysql> select sysdate(), sleep(3), sysdate();
+---------------------+----------+---------------------+
| sysdate() | sleep(3) | sysdate() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 |
+---------------------+----------+---------------------+
可以看到,雖然中途 sleep 3 秒,但 now() 函數兩次的時間值是相同的; sysdate() 函數兩次得到的時間值相差 3 秒。MySQL Manual 中是這樣描述 sysdate() 的:Return the time at which the function executes。
sysdate() 日期時間函數,一般情況下很少用到。
2. 獲得當前日期(date)函數:curdate()
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2008-08-08 |
+------------+
其中,下面的兩個日期函數等同于 curdate():
current_date()
,current_date
3. 獲得當前時間(time)函數:curtime()
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 22:41:30 |
+-----------+
其中,下面的兩個時間函數等同于 curtime():
current_time()
,current_time
4. 獲得當前 UTC 日期時間函數:utc_date(), utc_time(), utc_timestamp()
mysql> select utc_timestamp(), utc_date(), utc_time(), now()
+---------------------+------------+------------+---------------------+
| utc_timestamp() | utc_date() | utc_time() | now() |
+---------------------+------------+------------+---------------------+
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |
+---------------------+------------+------------+---------------------+
因為我國位于東八時區,所以本地時間 = UTC 時間 + 8 小時。UTC 時間在業務涉及多個國家和地區的時候,非常有用。
二、MySQL 日期時間 Extract(選取) 函數。
1. 選取日期時間的各個部分:日期、時間、年、季度、月、日、小時、分鐘、秒、微秒
set @dt = '2008-09-10 07:15:30.123456';
select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456
2. MySQL Extract() 函數,可以上面實現類似的
功能:
set @dt = '2008-09-10 07:15:30.123456';
select extract(year from @dt); -- 2008
select extract(quarter from @dt); -- 3
select extract(month from @dt); -- 9
select extract(week from @dt); -- 36
select extract(day from @dt); -- 10
select extract(hour from @dt); -- 7
select extract(minute from @dt); -- 15
select extract(second from @dt); -- 30
select extract(microsecond from @dt); -- 123456
select extract(year_month from @dt); -- 200809
select extract(day_hour from @dt); -- 1007
select extract(day_minute from @dt); -- 100715
select extract(day_second from @dt); -- 10071530
select extract(day_microsecond from @dt); -- 10071530123456
select extract(hour_minute from @dt); -- 715
select extract(hour_second from @dt); -- 71530
select extract(hour_microsecond from @dt); -- 71530123456
select extract(minute_second from @dt); -- 1530
select extract(minute_microsecond from @dt); -- 1530123456
select extract(second_microsecond from @dt); -- 30123456
MySQL Extract() 函數除了沒有date(),time() 的功能外,其他功能一應具全。并且還具有選取‘day_microsecond’ 等功能。注意這里不是只選取 day 和 microsecond,而是從日期的 day 部分一直選取到 microsecond 部分。夠強悍的吧!
MySQL Extract() 函數唯一不好的地方在于:你需要多敲幾次鍵盤。
3. MySQL dayof... 函數:dayofweek(), dayofmonth(), dayofyear()
分別返回日期參數,在一周、一月、一年中的位置。
set @dt = '2008-08-08';
select dayofweek(@dt); -- 6
select dayofmonth(@dt); -- 8
select dayofyear(@dt); -- 221
日期 '2008-08-08' 是一周中的第 6 天(1 = Sunday, 2 = Monday, ..., 7 = Saturday);一月中的第 8 天;一年中的第 221 天。
4. MySQL week... 函數:week(), weekofyear(), dayofweek(), weekday(), yearweek()
set @dt = '2008-08-08';
select week(@dt); -- 31
select week(@dt,3); -- 32
select weekofyear(@dt); -- 32
select dayofweek(@dt); -- 6
select weekday(@dt); -- 4
select yearweek(@dt); -- 200831
MySQL week() 函數,可以有兩個參數,具體可看手冊。 weekofyear() 和 week() 一樣,都是計算“某天”是位于一年中的第幾周。 weekofyear(@dt) 等價于 week(@dt,3)。
MySQL weekday() 函數和 dayofweek() 類似,都是返回“某天”在一周中的位置。不同點在于參考的標準, weekday:(0 = Monday, 1 = Tuesday, ..., 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday, ..., 7 = Saturday)
MySQL yearweek() 函數,返回 year(2008) + week 位置(31)。
5. MySQL 返回星期和月份名稱函數:dayname(), monthname()
set @dt = '2008-08-08';
select dayname(@dt); -- Friday
select monthname(@dt); -- August
思考,如何返回中文的名稱呢?
6. MySQL last_day() 函數:返回月份中的最后一天。
select last_day('2008-02-01'); -- 2008-02-29
select last_day('2008-08-08'); -- 2008-08-31
MySQL last_day() 函數非常有用,比如我想得到當前月份中有多少天,可以這樣來計算:
mysql> select now(), day(last_day(now())) as days;
+---------------------+------+
| now() | days |
+---------------------+------+
| 2008-08-09 11:45:45 | 31 |
+---------------------+------+
三、MySQL 日期時間計算函數
1. MySQL 為日期增加一個時間間隔:date_add()
set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- sub 1 day
MySQL adddate(), addtime()函數,可以用 date_add() 來替代。下面是 date_add() 實現 addtime() 功能示例:
mysql> set @dt = '2008-08-09 12:12:33';
mysql>
mysql> select date_add(@dt, interval '01:15:30' hour_second);
+------------------------------------------------+
| date_add(@dt, interval '01:15:30' hour_second) |
+------------------------------------------------+
| 2008-08-09 13:28:03 |
+------------------------------------------------+
mysql> select date_add(@dt, interval '1 01:15:30' day_second);
+-------------------------------------------------+
| date_add(@dt, interval '1 01:15:30' day_second) |
+-------------------------------------------------+
| 2008-08-10 13:28:03 |
+-------------------------------------------------+
date_add() 函數,分別為 @dt 增加了“1小時 15分 30秒” 和 “1天 1小時 15分 30秒”。建議:總是使用 date_add() 日期時間函數來替代 adddate(), addtime()。
2. MySQL 為日期減去一個時間間隔:date_sub()
mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
+----------------------------------------------------------------+
| date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) |
+----------------------------------------------------------------+
| 1997-12-30 22:58:59 |
+----------------------------------------------------------------+
MySQL date_sub() 日期時間函數 和 date_add() 用法一致,不再贅述。另外,MySQL 中還有兩個函數 subdate(), subtime(),建議,用 date_sub() 來替代。
3. MySQL 另類日期函數:period_add(P,N), period_diff(P1,P2)
函數參數“P” 的格式為“YYYYMM” 或者 “YYMM”,第二個參數“N” 表示增加或減去 N month(月)。
MySQL period_add(P,N):日期加/減去N月。
mysql> select period_add(200808,2), period_add(20080808,-2)
+----------------------+-------------------------+
| period_add(200808,2) | period_add(20080808,-2) |
+----------------------+-------------------------+
| 200810 | 20080806 |
+----------------------+-------------------------+
MySQL period_diff(P1,P2):日期 P1-P2,返回 N 個月。
mysql> select period_diff(200808, 200801);
+-----------------------------+
| period_diff(200808, 200801) |
+-----------------------------+
| 7 |
+-----------------------------+
在 MySQL 中,這兩個日期函數,一般情況下很少用到。
4. MySQL 日期、時間相減函數:datediff(date1,date2), timediff(time1,time2)
MySQL datediff(date1,date2):兩個日期相減 date1 - date2,返回天數。
select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7
MySQL timediff(time1,time2):兩個日期相減 time1 - time2,返回 time 差值。
select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
select timediff('08:08:08', '00:00:00'); -- 08:08:08
注意:timediff(time1,time2) 函數的兩個參數類型必須相同。
四、MySQL 日期轉換函數、時間轉換函數
1. MySQL (時間、秒)轉換函數:time_to_sec(time), sec_to_time(seconds)
select time_to_sec('01:00:05'); -- 3605
select sec_to_time(3605); -- '01:00:05'
2. MySQL (日期、天數)轉換函數:to_days(date), from_days(days)
select to_days('0000-00-00'); -- 0
select to_days('2008-08-08'); -- 733627
select from_days(0); -- '0000-00-00'
select from_days(733627); -- '2008-08-08'
3. MySQL Str to Date (字符串轉換為日期)函數:str_to_date(str, format)
select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30
可以看到,str_to_date(str,format) 轉換函數,可以把一些雜亂無章的字符串轉換為日期格式。另外,它也可以轉換為時間。“format” 可以參看 MySQL 手冊。
4. MySQL Date/Time to Str(日期/時間轉換為字符串)函數:date_format(date,format), time_format(time,format)
mysql> select date_format('2008-08-08 22:23:00', '%W %M %Y');
+------------------------------------------------+
| date_format('2008-08-08 22:23:00', '%W %M %Y') |
+------------------------------------------------+
| Friday August 2008 |
+------------------------------------------------+
mysql> select date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s');
+----------------------------------------------------+
| date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') |
+----------------------------------------------------+
| 20080808222301 |
+----------------------------------------------------+
mysql> select time_format('22:23:01', '%H.%i.%s');
+-------------------------------------+
| time_format('22:23:01', '%H.%i.%s') |
+-------------------------------------+
| 22.23.01 |
+-------------------------------------+
MySQL 日期、時間轉換函數:date_format(date,format), time_format(time,format) 能夠把一個日期/時間轉換成各種各樣的字符串格式。它是 str_to_date(str,format) 函數的 一個逆轉換。
5. MySQL 獲得國家地區時間格式函數:get_format()
MySQL get_format() 語法:
get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal'
MySQL get_format() 用法的全部示例:
select get_format(date,'usa') ; -- '%m.%d.%Y'
select get_format(date,'jis') ; -- '%Y-%m-%d'
select get_format(date,'iso') ; -- '%Y-%m-%d'
select get_format(date,'eur') ; -- '%d.%m.%Y'
select get_format(date,'internal') ; -- '%Y%m%d'
select get_format(datetime,'usa') ; -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'jis') ; -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'iso') ; -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'eur') ; -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'internal') ; -- '%Y%m%d%H%i%s'
select get_format(time,'usa') ; -- '%h:%i:%s %p'
select get_format(time,'jis') ; -- '%H:%i:%s'
select get_format(time,'iso') ; -- '%H:%i:%s'
select get_format(time,'eur') ; -- '%H.%i.%s'
select get_format(time,'internal') ; -- '%H%i%s'
MySQL get_format() 函數在實際中用到機會的比較少。
6. MySQL 拼湊日期、時間函數:makdedate(year,dayofyear), maketime(hour,minute,second)
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'
五、MySQL 時間戳(Timestamp)函數
1. MySQL 獲得當前時間戳函數:current_timestamp, current_timestamp()
mysql> select current_timestamp, current_timestamp();
+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+
2. MySQL (Unix 時間戳、日期)轉換函數:
unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)
下面是示例:
select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800
select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'
select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'
3. MySQL 時間戳(timestamp)轉換、增、減函數:
timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --
請看示例部分:
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01
select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00
MySQL timestampadd() 函數類似于 date_add()。
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12
select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7
MySQL timestampdiff() 函數就比 datediff() 功能強多了,datediff() 只能計算兩個日期(date)之間相差的天數。
六、MySQL 時區(timezone)轉換函數
convert_tz(dt,from_tz,to_tz)
select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00
時區轉換也可以通過 date_add, date_sub, timestampadd 來實現。
select date_add('2008-08-08 12:00:00', interval -8 hour); -- 2008-08-08 04:00:00
select date_sub('2008-08-08 12:00:00', interval 8 hour); -- 2008-08-08 04:00:00
select timestampadd(hour, -8, '2008-08-08 12:00:00'); -- 2008-08-08 04:00:00