1、
没钱的男人十有八九不自信。
有钱的男人十有八九充满了自信。
2、
没钱的男人想怎样挣钱。
有钱的男人想怎样花钱。
3、
对没钱的男人来说,钱真是他妈的罪恶,没钱就办不成很多事。
对有钱的男人来说,钱真是他妈的美好,有钱就办成了很多事。
4、
没钱的男人,小的时候,爱对父母说:爸,妈,你们要是有钱就好了。等到自己长大做了父亲后,又爱对孩子说:孩子,你要学会坚强,要学会靠自己,钱不是万能的。
有钱的男人,小的时候,爱对父母说:爸,妈,你们又不是没钱。等到自己长大做了父亲后,又爱对孩子说:孩子,你说,你要什么,老爸给你买。
5、
没钱的男人和几个朋友一同出去海吃海喝,即使表面上非常快乐,但心底里还是忍不住要犯嘀咕:结帐时,这钱到底谁付?
有钱的男人和几个朋友一同出去海吃海喝,快哉乐哉,没什么好犯嘀咕的,对他来说,钱不是问题,只要吃得好喝得好玩得好,就开心。
6、
有钱的男人对没钱的男人这样看:你不仅只是没有钱,而且,潇洒,慷慨,你也没有。
没钱的男人对有钱的男人这样看:你不就是有几个钱嘛,有钱,潇洒,慷慨,谁不会。
7、
没钱的男人没面子。这不需要什么理由。没钱就是理由。
有钱的男人有面子。这也不需要什么理由。有钱就是理由。
8、
没钱的男人在追求一个女孩时:她对我,虽然是这也爱,那也爱,可是,她要是又爱钱,那我该怎么办?
有钱的男人在追求一个女孩时:她对我,虽然是这也不爱,那也不爱,但是,她只要还爱钱,我就有办法。
9、
没钱的男人说:贫富差距,我虽然怕,但由此造成的社会尊重的差距,我更怕。
有钱的男人说:没有社会尊重的差距,我光要贫富差距做什么。我希望没钱的男人能理解这么一个道理:毕竟,有钱人永远只是少数。
10、
对没钱的男人来说,过舒服的日子,这是远虑,近忧是,怎样挣更多的钱。
对有钱的男人来说,过怎样舒服的日子,这是近忧,挣更多的钱,那是远虑。
11、
没钱的男人想:生活中要是这么多事都不与钱发生关系,那我就可以过得很好了。
有钱的男人想:幸亏生活中有这么多事都与钱发生关系,不然,我不会过得这么好。
12、
有时,没钱的男人急了:最好社会发生动荡,让那些有钱的男人也尝尝没钱的滋味。
有时,有钱的男人急了:凭什么人家有钱你就眼红。有本事你也挣去。
13、
没钱的男人:那个五星级的酒店,我要是能睡一晚就好了。
有钱的男人:什么五星级的酒店,还不如我家里的一个客厅。
14、
没钱的男人和老婆吵架了,老婆说,当初,要不是我,你这么穷,谁肯嫁给你。
有钱的男人和老婆吵架了,老婆说,你不要以为你有钱,就可以这样对我。
15、
没钱的男人:我发现了一个规律,现在,打工的,几乎都是没钱的男人。在这个规律面前,我是一个弱者,我很无奈。
有钱的男人:我也发现了一个规律,现在,打工的,几乎都是没钱的男人。在这个规律面前,我是一个强者,我利用了它。
16、
没钱的男人:我要是成为有钱的男人就好了。
有钱的男人:我永远都不要成为没钱的男人。
没钱的男人十有八九不自信。
有钱的男人十有八九充满了自信。
2、
没钱的男人想怎样挣钱。
有钱的男人想怎样花钱。
3、
对没钱的男人来说,钱真是他妈的罪恶,没钱就办不成很多事。
对有钱的男人来说,钱真是他妈的美好,有钱就办成了很多事。
4、
没钱的男人,小的时候,爱对父母说:爸,妈,你们要是有钱就好了。等到自己长大做了父亲后,又爱对孩子说:孩子,你要学会坚强,要学会靠自己,钱不是万能的。
有钱的男人,小的时候,爱对父母说:爸,妈,你们又不是没钱。等到自己长大做了父亲后,又爱对孩子说:孩子,你说,你要什么,老爸给你买。
5、
没钱的男人和几个朋友一同出去海吃海喝,即使表面上非常快乐,但心底里还是忍不住要犯嘀咕:结帐时,这钱到底谁付?
有钱的男人和几个朋友一同出去海吃海喝,快哉乐哉,没什么好犯嘀咕的,对他来说,钱不是问题,只要吃得好喝得好玩得好,就开心。
6、
有钱的男人对没钱的男人这样看:你不仅只是没有钱,而且,潇洒,慷慨,你也没有。
没钱的男人对有钱的男人这样看:你不就是有几个钱嘛,有钱,潇洒,慷慨,谁不会。
7、
没钱的男人没面子。这不需要什么理由。没钱就是理由。
有钱的男人有面子。这也不需要什么理由。有钱就是理由。
8、
没钱的男人在追求一个女孩时:她对我,虽然是这也爱,那也爱,可是,她要是又爱钱,那我该怎么办?
有钱的男人在追求一个女孩时:她对我,虽然是这也不爱,那也不爱,但是,她只要还爱钱,我就有办法。
9、
没钱的男人说:贫富差距,我虽然怕,但由此造成的社会尊重的差距,我更怕。
有钱的男人说:没有社会尊重的差距,我光要贫富差距做什么。我希望没钱的男人能理解这么一个道理:毕竟,有钱人永远只是少数。
10、
对没钱的男人来说,过舒服的日子,这是远虑,近忧是,怎样挣更多的钱。
对有钱的男人来说,过怎样舒服的日子,这是近忧,挣更多的钱,那是远虑。
11、
没钱的男人想:生活中要是这么多事都不与钱发生关系,那我就可以过得很好了。
有钱的男人想:幸亏生活中有这么多事都与钱发生关系,不然,我不会过得这么好。
12、
有时,没钱的男人急了:最好社会发生动荡,让那些有钱的男人也尝尝没钱的滋味。
有时,有钱的男人急了:凭什么人家有钱你就眼红。有本事你也挣去。
13、
没钱的男人:那个五星级的酒店,我要是能睡一晚就好了。
有钱的男人:什么五星级的酒店,还不如我家里的一个客厅。
14、
没钱的男人和老婆吵架了,老婆说,当初,要不是我,你这么穷,谁肯嫁给你。
有钱的男人和老婆吵架了,老婆说,你不要以为你有钱,就可以这样对我。
15、
没钱的男人:我发现了一个规律,现在,打工的,几乎都是没钱的男人。在这个规律面前,我是一个弱者,我很无奈。
有钱的男人:我也发现了一个规律,现在,打工的,几乎都是没钱的男人。在这个规律面前,我是一个强者,我利用了它。
16、
没钱的男人:我要是成为有钱的男人就好了。
有钱的男人:我永远都不要成为没钱的男人。
1、夫妻感情实笃。
其实这个理由有些牵强,千万不要相信外遇男人的鳄鱼眼泪。他们会把自己的婚姻生活说得一团糟,由此获取同情与谅解。其实很多男人明明婚姻美满,家庭幸福,却偏偏要平地起波澜。所以女人千万不要患幼稚病,觉得外遇只会遇上别人的老公,而自己的老公是绝缘体。
2、自身条件不够。
外遇是一项奢侈消费,不是每个已婚男人都有足够的资本和魅力让其他女子甘心情愿做第三者的。平庸男人即便垂涎欲滴也只能“高山仰止,心向往之”。他们不是不愿,只是不能,但凡有天鸡犬升天了,定然“贵易交,富易妻”。所谓“老实男人”多属于此。
3、有贼心,没贼胆。
外遇是瑞士银行里的一颗“祖母绿”,像《偷天陷阱》中的泽塔琼斯般,非有胆有识者莫敢偷天换柱。欲外遇者,想到其严重后果——家破人亡、妻离子散、前程尽失、臭名昭著......机会成本太大,就不得不望而却步,敬而远之。理智男人多属于此。
4、嫌麻烦。
外遇是一个复杂而系统的工程,经济、政治、文化无所不包,谎言、欺骗无所不用有外遇就像搞外交,玩平衡要玩得天衣无缝,要两面讨好,还要八面玲珑,每天生活像打仗,实在分身乏术、时间有限,心脏脆弱者难受其力,麻烦透顶,还是得过且过吧。懒惰男人多属于此。
5、机遇不逮。
外遇就像中彩票,可遇而不可求。即便你有时间、精力、金钱和魅力,也要条件成熟,抓准时机。可能你是妻管严,没有自由,可能你没有遇上心仪而合适的对象,如果外遇女神不垂青你,也不要暗自悲伤。所谓”冯唐易老,李广难封。”古人多有怀才不遇者,多你一个也不多了。
6、情感粗糙。
外遇是上等人的生活情节,也是慢工出细活的事。只有出身高贵、心思细腻者才会有此精神诉求。否则,一日三餐都不保,哪还有心思去外遇?情感粗糙的男人哄一个女人都嫌累,哪还有闲工夫去招架其他的女人?还不如跟哥们喝喝酒,打打牌来得痛快!
7、天花情结。
外遇就像出天花,但凡没出过,总有出天花的危险。而一旦出过,就有了抗体,不再患此疾。外遇是一部看上去很美的电影,实则逻辑混乱,内容分裂,神经歇斯底里。所以有过外遇的人明白此中真谛。不过此抗体的生存时间长短因人而异,有的人“好了伤疤忘了疼”,也有的人“一朝被蛇咬,十年怕井绳。”自:Club
十七岁的时候,有个女孩喜欢上了他,但是他离她很远,他心里面只有自己那个女孩,他觉得看别的女孩都是对她的不忠。
十八岁的时候,看了一个MTV,感动得想哭,他想,如果自己的女孩失去了双眼,他一定像男主角会毫不犹豫的把自己的眼睛给她,让她能看到光明。
十九岁的时候,高考了。终于和自己暗恋的女孩分别,坐火车去学校的时候,感觉自己离她越来越远,心像被掏空了一样。还在想自己一定不会忘记她,等到自己成功以后一定要去找她。
二十岁的时候,听到有人讲黄色笑话,觉得这人真可耻。
二十一岁的时候,她的回信中告诉他,自己有了男朋友。偷偷的哭了一个晚上。
二十二岁的时候,他向一个女孩表白,女孩说"你是个好人,可是我还小。"他想,我的确是个好人,他说"没关系,我可以等你。"心想,我不会像那些花心的人一样,三年五年我也能等。
二十三岁的时候,说自己还小的女孩和一个帅哥恋爱了。他很纳闷,长大原来可以这快。
二十四岁的时候,他又向一个女孩表白,女孩说"你是个好人,可是我并不适合你。"他纳闷很久,我是好人你怎么还不适合我呢?
二十五岁的时候,他又追求一个女孩,女孩接受了他。他开始很幸福的为未来拼搏,他想,一时的开心只是暂时的,只有努力拼搏,他和她才能有快乐的未来,但是,半年以后,女孩和他分手了。只是因为另外一个男孩会说让她开心的话。女孩说"你是个好人,是我对不起你。"他似乎明白了问题所在,他是个好人。
二十六岁的时候,他开始堕落,交网友。打扮得时尚而酷,而且渐渐的学习着讨好女孩的话。不久,他有了个女朋友,虽然他对她也很好,可是,他心里知道,自己并不爱她。
二十七岁的时候,他和女孩分手了。他对女孩说"你是个好女孩,是我对不起你。"
二十八岁的时候,他尝试了一夜情,发现别人能做的,自己也一样。
二十九岁的时候,他学会了讲黄色笑话,并且以看旁边的女孩子脸红为乐趣。
三十岁的时候,他忽然发现自己变得很有能力追求到女孩,但是却没有了爱的能力。于是
他在自己QQ上写下了如下的话************************************************
其实每个男孩,本来都是想做一个感情专一的好男人的。
其实每个男孩,本来看女孩子都是看脸而不是胸部的。其实每个男孩,本来都是不会讲黄色笑话的。
其实每个男孩,本来都是渴望爱一个人直到永远的。
只是,没有任何女孩爱这样的男孩,她们觉得这样的男孩太幼稚,太古板,没有情趣。
于是男孩开始改变,变成女孩喜欢的那种嘴角挂着坏坏的笑,玩世不恭或者幽默
开始学会说甜言蜜语而不是心里想说的话开始学会假装关心,学会给女孩送小饰物讨好她学会如何追求,如何把握爱情。或者看破红尘,游戏情场,成为女人恨恨的那种男人
他们可以很容易俘获女孩子的心但是他们也会在黑的夜里叼着烟流泪心里有爱的时候,没有女孩.有了女孩,却永远没有了爱的感觉在听到女人抱怨世上没有一个好男人时候他们不会再去努力做个好男人,只是微笑着擦肩而过
十八岁的时候,看了一个MTV,感动得想哭,他想,如果自己的女孩失去了双眼,他一定像男主角会毫不犹豫的把自己的眼睛给她,让她能看到光明。
十九岁的时候,高考了。终于和自己暗恋的女孩分别,坐火车去学校的时候,感觉自己离她越来越远,心像被掏空了一样。还在想自己一定不会忘记她,等到自己成功以后一定要去找她。
二十岁的时候,听到有人讲黄色笑话,觉得这人真可耻。
二十一岁的时候,她的回信中告诉他,自己有了男朋友。偷偷的哭了一个晚上。
二十二岁的时候,他向一个女孩表白,女孩说"你是个好人,可是我还小。"他想,我的确是个好人,他说"没关系,我可以等你。"心想,我不会像那些花心的人一样,三年五年我也能等。
二十三岁的时候,说自己还小的女孩和一个帅哥恋爱了。他很纳闷,长大原来可以这快。
二十四岁的时候,他又向一个女孩表白,女孩说"你是个好人,可是我并不适合你。"他纳闷很久,我是好人你怎么还不适合我呢?
二十五岁的时候,他又追求一个女孩,女孩接受了他。他开始很幸福的为未来拼搏,他想,一时的开心只是暂时的,只有努力拼搏,他和她才能有快乐的未来,但是,半年以后,女孩和他分手了。只是因为另外一个男孩会说让她开心的话。女孩说"你是个好人,是我对不起你。"他似乎明白了问题所在,他是个好人。
二十六岁的时候,他开始堕落,交网友。打扮得时尚而酷,而且渐渐的学习着讨好女孩的话。不久,他有了个女朋友,虽然他对她也很好,可是,他心里知道,自己并不爱她。
二十七岁的时候,他和女孩分手了。他对女孩说"你是个好女孩,是我对不起你。"
二十八岁的时候,他尝试了一夜情,发现别人能做的,自己也一样。
二十九岁的时候,他学会了讲黄色笑话,并且以看旁边的女孩子脸红为乐趣。
三十岁的时候,他忽然发现自己变得很有能力追求到女孩,但是却没有了爱的能力。于是
他在自己QQ上写下了如下的话************************************************
其实每个男孩,本来都是想做一个感情专一的好男人的。
其实每个男孩,本来看女孩子都是看脸而不是胸部的。其实每个男孩,本来都是不会讲黄色笑话的。
其实每个男孩,本来都是渴望爱一个人直到永远的。
只是,没有任何女孩爱这样的男孩,她们觉得这样的男孩太幼稚,太古板,没有情趣。
于是男孩开始改变,变成女孩喜欢的那种嘴角挂着坏坏的笑,玩世不恭或者幽默
开始学会说甜言蜜语而不是心里想说的话开始学会假装关心,学会给女孩送小饰物讨好她学会如何追求,如何把握爱情。或者看破红尘,游戏情场,成为女人恨恨的那种男人
他们可以很容易俘获女孩子的心但是他们也会在黑的夜里叼着烟流泪心里有爱的时候,没有女孩.有了女孩,却永远没有了爱的感觉在听到女人抱怨世上没有一个好男人时候他们不会再去努力做个好男人,只是微笑着擦肩而过
一位充满智慧的男人曾经告诉我:“作为一个男人,为了活你就必须先得死一次。”我既没有把他的话太放在心上,也没有完全明白他话中的意思,……直到我有了一次亲身经历。
也许有人会说:“你明白了,我还没明白呢!”那么,我就来解释一下:为什么有些被认为不怎么样的男人身边总断不了女友相伴?为什么你这个好男人却偏偏形单影只?
我是说,男人为了有佳人相伴,就必须首先让那个“好”我死去——一阵心痛的感觉之后,彻底释放内心的“坏”我。
一个经历过真正的爱情,为意中人奉献了一切,之后发现自己的心恰恰被那个人撕碎的男人一定能够理解我的意思。而那些还没有被他以心相许的那个人伤害过的男人很可能并不相信我的理论。无论如何,了解好男人终将失败并且屡试不爽的原因是非常重要的。
与很多女人认为的不同,男人是很希望建立一个成功的感情关系的。大多数男人都不会放弃任何追求自己梦中情人的机会。事实上,当一个男人真的遇到令自己心仪的女人,他的激情就会唤起心中的“好我”。他脑海中浮现的都是“我要把这个女人留住,因此我要做个好男人,我要好好待她,我要为她做一切事”这类的想法。
唯一的问题是,做好男人同时意味着做无聊的男人。征服别人和争取无法得到的东西都是能够带来极大兴奋感的欲望,做好男人会使与你交往的女人失去享受这种兴奋感的机会。最终,女人会因此失去对你的兴趣。
其结果就是,这个女人再去找一个能够为她的生活重新带来兴奋感的男人——通过接受一个新的挑战。挑战和兴奋感通常来自自私的态度,比如一个只在乎自己从不在乎别人的“坏”家伙的态度。好男人只能带着一颗破碎的心看着心爱的人远去,扪心自问究竟做错了什么。
直到这时,他才渐渐意识到,女人大都不清楚自己想要什么样的男人。反正做好男人在这个阶段肯定是没有益处的。办法只有一个:让“好我”死亡。这就是生活,是好男人们的大势所趋。
女人不断伤害着好男人,却把不怎么样的男人给她们带来的痛苦视为有益身心健康的良药。男人最终(并且往往很快)将会发现女人的这种“心愿”。于是,他们与内心中的某些东西一刀两断,开始学习做一个“不怎么样的男人”。
变成这种类型的男人,一般应该表现出偏激的态度,并且装得像个完全自私的男人,从不考虑别人的感受。另外,你还应该学会巧舌如簧的本领。这样的人能够为女人的生活带来天翻地覆般的激情和兴奋。直到木已成舟,女人又会为这个人伤心抑郁。因为此时,这个男人已经确确实实再不愿意完全地投入感情,以免引火烧身。可见,当女人在经意或不经意间将好男人改造为不怎么样的男人时,她们其实在搬起石头砸自己的脚。
如果说女人其实是想要好男人的,为什么多数好男人至今单身?又为什么我们总能听到某个女人与大无赖约会的故事?
原因是女人一般不想要好男人,或者说,她们没有意识到自己需要好男人。女人只重视情绪上的反应而不看事实真相。谁能为女人带来情绪上的跌宕起伏?当然是无赖们。
归根结底,我们究竟应该怎么做呢?没有人想被感情伤害,但也没有人想真的被当作无赖。重要的是,在感情面前保持态度的平衡。男人应该有本事追求女人,取悦女人并且保持自身的挑战性以便让女人兴奋。也就是说,应该好好对待女人,但要摆正她在你生活中的位置。不要从一开始就把她供在至高无上的位置,浑然忘记这世上还有你自己、你的至亲骨肉和你的朋友们。
也许有人会说:“你明白了,我还没明白呢!”那么,我就来解释一下:为什么有些被认为不怎么样的男人身边总断不了女友相伴?为什么你这个好男人却偏偏形单影只?
我是说,男人为了有佳人相伴,就必须首先让那个“好”我死去——一阵心痛的感觉之后,彻底释放内心的“坏”我。
一个经历过真正的爱情,为意中人奉献了一切,之后发现自己的心恰恰被那个人撕碎的男人一定能够理解我的意思。而那些还没有被他以心相许的那个人伤害过的男人很可能并不相信我的理论。无论如何,了解好男人终将失败并且屡试不爽的原因是非常重要的。
与很多女人认为的不同,男人是很希望建立一个成功的感情关系的。大多数男人都不会放弃任何追求自己梦中情人的机会。事实上,当一个男人真的遇到令自己心仪的女人,他的激情就会唤起心中的“好我”。他脑海中浮现的都是“我要把这个女人留住,因此我要做个好男人,我要好好待她,我要为她做一切事”这类的想法。
唯一的问题是,做好男人同时意味着做无聊的男人。征服别人和争取无法得到的东西都是能够带来极大兴奋感的欲望,做好男人会使与你交往的女人失去享受这种兴奋感的机会。最终,女人会因此失去对你的兴趣。
其结果就是,这个女人再去找一个能够为她的生活重新带来兴奋感的男人——通过接受一个新的挑战。挑战和兴奋感通常来自自私的态度,比如一个只在乎自己从不在乎别人的“坏”家伙的态度。好男人只能带着一颗破碎的心看着心爱的人远去,扪心自问究竟做错了什么。
直到这时,他才渐渐意识到,女人大都不清楚自己想要什么样的男人。反正做好男人在这个阶段肯定是没有益处的。办法只有一个:让“好我”死亡。这就是生活,是好男人们的大势所趋。
女人不断伤害着好男人,却把不怎么样的男人给她们带来的痛苦视为有益身心健康的良药。男人最终(并且往往很快)将会发现女人的这种“心愿”。于是,他们与内心中的某些东西一刀两断,开始学习做一个“不怎么样的男人”。
变成这种类型的男人,一般应该表现出偏激的态度,并且装得像个完全自私的男人,从不考虑别人的感受。另外,你还应该学会巧舌如簧的本领。这样的人能够为女人的生活带来天翻地覆般的激情和兴奋。直到木已成舟,女人又会为这个人伤心抑郁。因为此时,这个男人已经确确实实再不愿意完全地投入感情,以免引火烧身。可见,当女人在经意或不经意间将好男人改造为不怎么样的男人时,她们其实在搬起石头砸自己的脚。
如果说女人其实是想要好男人的,为什么多数好男人至今单身?又为什么我们总能听到某个女人与大无赖约会的故事?
原因是女人一般不想要好男人,或者说,她们没有意识到自己需要好男人。女人只重视情绪上的反应而不看事实真相。谁能为女人带来情绪上的跌宕起伏?当然是无赖们。
归根结底,我们究竟应该怎么做呢?没有人想被感情伤害,但也没有人想真的被当作无赖。重要的是,在感情面前保持态度的平衡。男人应该有本事追求女人,取悦女人并且保持自身的挑战性以便让女人兴奋。也就是说,应该好好对待女人,但要摆正她在你生活中的位置。不要从一开始就把她供在至高无上的位置,浑然忘记这世上还有你自己、你的至亲骨肉和你的朋友们。
总记录数 1210
免费短信记录数 300
80元短信费用。。。
按主被叫分类
主叫通话 32次 费用合计 13.67元
被叫通话 48次 费用合计 42.78元
按通话地点分类
本地通话 80次 费用合计 56.45元
漫游通话 0次 费用合计 0.00元
140多元的钱。。。+20元月租=170来块钱
个人认为这个月可能会少一些,因为开通了接听免费。。。可能短息还是占了一个很高的费用。
免费短信记录数 300
80元短信费用。。。
按主被叫分类
主叫通话 32次 费用合计 13.67元
被叫通话 48次 费用合计 42.78元
按通话地点分类
本地通话 80次 费用合计 56.45元
漫游通话 0次 费用合计 0.00元
140多元的钱。。。+20元月租=170来块钱
个人认为这个月可能会少一些,因为开通了接听免费。。。可能短息还是占了一个很高的费用。
企业邮箱G级别的快呀上线了。今晚12点线上测试,不得不加班,希望可以换个倒休,我想换到过年。。
An old web technology is slowly being resurrected from the depths of history. Browser features that have gone untouched for years are once again being employed to bring better responsiveness to UIs. Servers are learning to cope with a new way of doing things. And I’m not talking about Ajax.
New services like Jot Live and Meebo are built with a style of data transmission that is neither traditional nor Ajax. Their brand of low-latency data transfer to the browser is unique, and it is becoming ever-more common. Lacking a better term, I’ve taken to calling this style of event-driven, server-push data streaming “Comet”. It doesn’t stand for anything, and I’m not sure that it should. There is much confusion about how these techniques work, and so using pre-existing definitions and names is as likely to get as much wrong as it would get right.
Defining Comet
For a new term to be useful, at a minimum we need some examples of the technology, a list of the problems being solved, and properties which distinguish it from other techniques. As with Ajax, these aren’t hard to find. A short list of example applications includes:
So what makes these apps special? What makes them different from other things that might at first glance appear similar? Fundamentally, they all use long-lived HTTP connections to reduce the latency with which messages are passed to the server. In essence, they do not poll the server occasionally. Instead the server has an open line of communication with which it can push data to the client.
From the perspective of network activity, we can modify JJG’s original Ajax diagram to illustrate how Comet differs:

As is illustrated above, Comet applications can deliver data to the client at any time, not only in response to user input. The data is delivered over a single, previously-opened connection. This approach reduces the latency for data delivery significantly.
The architecture relies on a view of data which is event driven on both sides of the HTTP connection. Engineers familiar with SOA or message oriented middleware will find this diagram to be amazingly familiar. The only substantive change is that the endpoint is the browser.
While Comet is similar to Ajax in that it’s asynchronous, applications that implement the Comet style can communicate state changes with almost negligible latency. This makes it suitable for many types of monitoring and multi-user collaboration applications which would otherwise be difficult or impossible to handle in a browser without plugins.
Why Is Comet Better For Users?
Regular Ajax improves the responsiveness of a UI for a single user, but at the cost of allowing the context to go “stale” for long-lived pages. Changes to data from others users is lost until a user refreshes the whole page. An application can alternately return to the “bad old days” and maintain some sort of state mechanism by which it tells client about changes since the last time they’ve communicated. The user has to either wait until they preform some action which would kick off a request to see the updated state from other users (which might impact the action they wanted to preform!) or request changes from the server at some interval (called “polling”). Since the web is inherently multi-user, it’s pretty obvious that regular Ajax imposes usability and transparency hurdles for users. Applications that employ the Comet technique can avoid this problem by pushing updates to all clients as they happen. UI state does not go out of sync and everyone using an application can easily understand what their changes will mean for other users. Ajax improves single-user responsiveness. Comet improves application responsiveness for collaborative, multi-user applications and does it without the performance headaches associated with intermittent polling.
But Does It Scale?
New server software is often required to make applications built using Comet scale, but the patterns for event-driven IO on the server side are becoming better distributed. Even Apache will provide a Comet-ready worker module in the upcoming 2.2 release. Until then, tools like Twisted, POE, Nevow, mod_pubsub, and other higher-level event-driven IO abstractions are making Comet available to developers on the bleeding edge. Modern OSes almost all now support some sort of kernel-level event-driven IO system as well. I’ve even heard that Java’s NIO packages will start to take advantage of them in a forthcoming release. These tools are quietly making the event-driven future a reality. This stuff will scale, and most of the tools are in place already.
I’ll be giving a more on this topic at ETech and describing the various techniques that Comet applications can employ to push data from the server to the client. As always, I’ll post the slides here as well.
The future of the read-write web is multi-user. There is life after Ajax.
Endnotes
First, a word on terminology and its importance. “Ajax” was coined to describe background request/response data transfer. Many of us had worked on solutions to do exactly this, but it wasn’t until a simple name and accompanying description were provided that it was possible for people not directly building applications to describe what it was they liked about it. Common terminology acts not only as a shortcut in discussions between technical folks, but also as a bridge for those who may not be able to give a technical rundown of exactly how it works.
As with Ajax, those of us who build technology are now faced with another communication challenge. We have a hard problem for which solutions are available (and have been for some time) but no way to communicate about them. Terminology is again the missing link. Today, keeping an HTTP connection open for doing low-latency data transfer to the browser has no digestible name. When I describe a cool new hack, there’s nothing to associate it with. When people say “how the hell did they do that?”, we don’t have a compact answer. Therefore, in the spirit of improved communication (and not technology invention), I’m proposing a new name for this stuff.
Next, for those who are network-level programmers or are familiar with sockets and/or basic TCP/IP programming, you will probably scoff at the concept of web applications finally getting this kind of datagram packet support. Fair enough. It is however interesting to note that while more responsive UIs have been available on a variety of platforms to date, the Web has “won” the broad majority of market share for most classes of applications in which the browser provides enough native (non-plugin) support to make the performance and/or UI feasible. Comet may be a new name for an old set of concepts wrapped in some pretty grotty hacks, but that in no way diminishes the market impact it will have (and is already having).
Lastly, as current Dojo users might expect, Dojo already supports Comet via
dojo.io.bind()
. More than a year ago we designed the API with Comet in mind. In the next couple of weeks I’ll be showing how bind
’s pluggable transport layer can be combined with Dojo’s event topic mechanism to provide message delivery on top of a message bus.
我们先来看一段代码。
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
}
?>
按照php手册里的说法
该函数将当前为止程序的所有输出发送到用户的浏览器。
上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。
好,我们来改一下这段代码,改成
<?php
ob_end_clean();//修改部分
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
}
?>
嘿,加了这一句ob_end_clean();,居然就OK了。实际上,我们把ob_end_clean()换成ob_end_flush()也一样OK。
我再来改一改。
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();//修改部分
flush();
sleep(1);
}
?>
运行一下,是不是发现$i也隔一秒输出一次了?这是为什么呢?
别急,我们来看看php.ini。
打开php.ini,搜索output_buffering,我们会看到类似这样的设置 output_buffering = 4096。正如它的名字output_buffering一样,这个设置的作用就是把输出缓冲一下,缓冲大小为4096bytes.
在我们的第一段代码里,之所以没有按预期的输出,正是因为这个output_buffering把那些输出都缓冲了。没达到4096bytes或者脚本结束,输出是不会被发送出去的。
而第二段代码中的ob_end_clean()和ob_end_flush()的作用,就是终止缓冲。这样就不用等到有4096bytes的缓冲之后才被发送出去了。
第三段代码中,用了一句ob_flush(),它的作用就是把缓冲的数据发送出去,但是并不会终止缓冲,所以它必须在每次flush()前使用。
如果不想使用ob_end_clean(),ob_end_flush()和ob_flush(),我们就必须把php.ini里的 output_buffering设得足够小,例如设为0。需要注意的是,如果你打算在脚本中使用ini_set(” output_buffering”,”0″)来设置,那么请停下来吧,这种方法是不行的。因为在脚本一开始的时候,缓冲设置就已经被载入,然后缓冲就开始了。
可能你会问了,既然ob_flush()是把缓冲的数据发送出去,那么为什么还需要用flush()???直接用下面这段代码不行吗??
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
sleep(1);
}
?>
请注意ob_flush()和flush()的区别。前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。所以当缓冲存在的时候,我们必须ob_flush()和flush()同时使用。
那是不是flush()在这里就是不可缺少的呢?不是的,我们还有另外一种方法,使得当有数据输出的时候,马上被发送到浏览器。下面这两段代码就是不需要使用flush()了。(当你把output_buffering设为0的时候,连ob_flush()和ob_end_clean()都不需要了)
<?php
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
sleep(1);
}
?>
<?php
ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i;
sleep(1);
}
?>
请注意看上面的ob_implicit_flush(true),这个函数强制每当有输出的时候,即刻把输出发送到浏览器。这样就不需要每次输出(echo)后,都用flush()来发送到浏览器了。
以上所诉可能在某些浏览器中不成立。因为浏览器也有自己的规则。我是用Firefox1.5,IE6,opera8.5来测试的。其中opera就不能正常输出,因为它有一个规则,就是不遇到一个HTML标签,就绝对不输出,除非到脚本结束。而FireFox和IE还算比较正常的。
最后附上一段非常有趣的代码,作者为PuTTYshell。在一个脚本周期里,每次输出,都会把前一次的输出覆盖掉。
以下代码只在firefox下可用,其他浏览器并不支持multipart/x-mixed-replace的Content-Type.
<?php
header('Content-type: multipart/x-mixed-replace;boundary=endofsection');
print "\n--endofsection\n";
$pmt = array("-", "\\", "|", "/" );
for( $i = 0; $i <10; $i ++ ){
sleep(1);
print "Content-type: text/plain\n\n";
print "Part $i\t".$pmt[$i % 4];
print "--endofsection\n";
ob_flush();
flush();
}
print "Content-type: text/plain\n\n";
print "The end\n";
print "--endofsection--\n";
?>
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
}
?>
按照php手册里的说法
该函数将当前为止程序的所有输出发送到用户的浏览器。
上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。
好,我们来改一下这段代码,改成
<?php
ob_end_clean();//修改部分
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
}
?>
嘿,加了这一句ob_end_clean();,居然就OK了。实际上,我们把ob_end_clean()换成ob_end_flush()也一样OK。
我再来改一改。
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();//修改部分
flush();
sleep(1);
}
?>
运行一下,是不是发现$i也隔一秒输出一次了?这是为什么呢?
别急,我们来看看php.ini。
打开php.ini,搜索output_buffering,我们会看到类似这样的设置 output_buffering = 4096。正如它的名字output_buffering一样,这个设置的作用就是把输出缓冲一下,缓冲大小为4096bytes.
在我们的第一段代码里,之所以没有按预期的输出,正是因为这个output_buffering把那些输出都缓冲了。没达到4096bytes或者脚本结束,输出是不会被发送出去的。
而第二段代码中的ob_end_clean()和ob_end_flush()的作用,就是终止缓冲。这样就不用等到有4096bytes的缓冲之后才被发送出去了。
第三段代码中,用了一句ob_flush(),它的作用就是把缓冲的数据发送出去,但是并不会终止缓冲,所以它必须在每次flush()前使用。
如果不想使用ob_end_clean(),ob_end_flush()和ob_flush(),我们就必须把php.ini里的 output_buffering设得足够小,例如设为0。需要注意的是,如果你打算在脚本中使用ini_set(” output_buffering”,”0″)来设置,那么请停下来吧,这种方法是不行的。因为在脚本一开始的时候,缓冲设置就已经被载入,然后缓冲就开始了。
可能你会问了,既然ob_flush()是把缓冲的数据发送出去,那么为什么还需要用flush()???直接用下面这段代码不行吗??
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
sleep(1);
}
?>
请注意ob_flush()和flush()的区别。前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。所以当缓冲存在的时候,我们必须ob_flush()和flush()同时使用。
那是不是flush()在这里就是不可缺少的呢?不是的,我们还有另外一种方法,使得当有数据输出的时候,马上被发送到浏览器。下面这两段代码就是不需要使用flush()了。(当你把output_buffering设为0的时候,连ob_flush()和ob_end_clean()都不需要了)
<?php
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
sleep(1);
}
?>
<?php
ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i;
sleep(1);
}
?>
请注意看上面的ob_implicit_flush(true),这个函数强制每当有输出的时候,即刻把输出发送到浏览器。这样就不需要每次输出(echo)后,都用flush()来发送到浏览器了。
以上所诉可能在某些浏览器中不成立。因为浏览器也有自己的规则。我是用Firefox1.5,IE6,opera8.5来测试的。其中opera就不能正常输出,因为它有一个规则,就是不遇到一个HTML标签,就绝对不输出,除非到脚本结束。而FireFox和IE还算比较正常的。
最后附上一段非常有趣的代码,作者为PuTTYshell。在一个脚本周期里,每次输出,都会把前一次的输出覆盖掉。
以下代码只在firefox下可用,其他浏览器并不支持multipart/x-mixed-replace的Content-Type.
<?php
header('Content-type: multipart/x-mixed-replace;boundary=endofsection');
print "\n--endofsection\n";
$pmt = array("-", "\\", "|", "/" );
for( $i = 0; $i <10; $i ++ ){
sleep(1);
print "Content-type: text/plain\n\n";
print "Part $i\t".$pmt[$i % 4];
print "--endofsection\n";
ob_flush();
flush();
}
print "Content-type: text/plain\n\n";
print "The end\n";
print "--endofsection--\n";
?>


----==《在路上》==----
演唱:刘欢
那一天
我不得已上路
为不安分的心
为自尊的生存
为自我的证明
路上的辛酸已融进我的眼睛
心灵的困境已化作我的坚定
在路上 用我心灵的呼声
在路上 只为伴着我的人
在路上 是我生命的远行
在路上 只为温暖我的人
温暖我的人
◇◇◇◇◇◇
◆◆◆◆
◇◇◇◇◇◇
那一天
我不得已上路
为不安分的心
为自尊的生存
为自我的证明
路上的辛酸已融进我的眼睛
心灵的困境已化作我的坚定
在路上 用我心灵的呼声
在路上 只为伴着我的人
在路上 是我生命的远行
在路上 只为温暖我的人
温暖我的人
在路上 用我心灵的呼声
在路上 只为伴着我的人
在路上 是我生命的远行
在路上 只为温暖我的人
温暖我的人
欠你的温柔
如果我不能让你跟朋友比 我抱歉
如果我让你有一些不如意 我抱歉
你越说爱我不觉得吃力
我越担心有天你会离去
一字一句 吞了下去
表情和心情总是背道而行
欠你的温柔 是心中最大的石头
我不能够 给的足够
男人在爱里该谦卑还是该骄傲
欠你的温柔 是手里最慌的承诺
该怎么做 才配的上你善良的笑容
我要你告诉我
如果我不能让你跟朋友比 我抱歉
如果我让你有一些不如意 我抱歉
你越说爱我不觉得吃力
我越担心有天你会离去
一字一句 吞了下去
表情和心情总是背道而行
欠你的温柔 是心中最大的石头
我不能够 给的足够
男人在爱里该谦卑还是该骄傲
欠你的温柔 是手里最慌的承诺
该怎么做 才配的上你善良的笑容
我要你告诉我
欠你的温柔 是心中最大的石头
我不能够 给的足够
男人在爱里该谦卑还是该骄傲
欠你的温柔 是手里最慌的承诺
该怎么做 才配的上你善良的笑容
我要你告诉我

centos 7 禁止root直接登录系统,FreeBSD出于安全原因,默认参数很严格,禁止root用户直接使用ssh登陆
比如先用非root的帐户,登陆到ssh后,su成为root
如果想直接用root登陆,则修改如下配置文件:
vi /etc/ssh/sshd_config #是sshd_config得有个d,不是这个:/etc/ssh/ssh_config,是这个/etc/ssh/sshd_config
找到其中的如下一行,将前边的#符号去掉,并修改no为yes
#PermitRootLogin no
改成:
PermitRootLogin yes
接下来执行如下命令重新启动SSH服务:
xxx# /etc/rc.d/sshd restart
Stopping sshd.
Waiting for PIDS: 349.
Starting sshd.
xxx#
重新启动完成后,ssh即可登陆。
有可能要重新启动一下,reboot,我有次就重新启动可以ssh进去。AddTime:2016-01-10
service sshd restart
ps -ef|grep sshd
root 49624 1 0 17:14 ? 00:00:00 /usr/sbin/sshd
____________________________________________________________________________
开启SSH服务
(1)ee /etc/inetd.conf #编辑,去掉sshd前面的#
ssh stream tcp nowait root /usr/sbin/sshd sshd -i -4
(2)ee /etc/rc.conf #编辑,在最后添加
sshd_enable="yes"
(3)ee /etc/ssh/sshd_config #编辑配置文件
PermitRootLogin yes #允许root登录
PasswordAuthentication yes #使用密码验证
PermitEmptyPasswords no #不允许空密码登录
/etc/rc.d/sshd start #启动ssh服务
/etc/rc.d/sshd restart #重启ssh
http://www.osyunwei.com/archives/3007.html
____________________________________________________________________________
1 在FreeBSD中执行
ssh-keygen -t dsa
可得到
/home/leakon/.ssh/id_dsa
/home/leakon/.ssh/id_dsa.pub
2 可以用 WinSCP 下载这个两个文件到本地,保存到
C:\Documents and Settings\leakon\Application Data\VanDyke\
这是 SecureCRT 在 Windows 的 leakon 用户的程序数据文件夹中生成的目录
我保存到:D:\ssh_tmp\freeBSD_Key_Login
3 打开会话选项,在 分类 中选择 SSH2,在右边的 身份验证 中选择 公钥(PublicKey),然后点击旁边的 属性(Properites),选择 使用会话公钥设置(注意:会话公钥)(Use session public key setting),在 使用身份文件(Use identify file) 的输入框中,选择刚才下载回来的 id_dsa,注意,id_dsa 和 id_dsa.pub 要保存在一起(两个文件取名任意,但必须符合 somekey 和 somekey.pub)
4 按照 /etc/ssh/sshd_config 中指定的公钥文件名 AuthorizedKeysFile .ssh/authorized_keys,修改本地公钥文件名,在FreeBSD中执行
cd /home/leakon/.ssh/
mv id_dsa.pub authorized_keys 另外一个id_dsa可以不动它。
至此,方法一大功告成,重新用 SecureCRT 连接一下试试,直接就登录好了吧
比如先用非root的帐户,登陆到ssh后,su成为root
如果想直接用root登陆,则修改如下配置文件:
vi /etc/ssh/sshd_config #是sshd_config得有个d,不是这个:/etc/ssh/ssh_config,是这个/etc/ssh/sshd_config
找到其中的如下一行,将前边的#符号去掉,并修改no为yes
#PermitRootLogin no
改成:
PermitRootLogin yes
接下来执行如下命令重新启动SSH服务:
xxx# /etc/rc.d/sshd restart
Stopping sshd.
Waiting for PIDS: 349.
Starting sshd.
xxx#
重新启动完成后,ssh即可登陆。
有可能要重新启动一下,reboot,我有次就重新启动可以ssh进去。AddTime:2016-01-10
service sshd restart
ps -ef|grep sshd
root 49624 1 0 17:14 ? 00:00:00 /usr/sbin/sshd
____________________________________________________________________________
开启SSH服务
(1)ee /etc/inetd.conf #编辑,去掉sshd前面的#
ssh stream tcp nowait root /usr/sbin/sshd sshd -i -4
(2)ee /etc/rc.conf #编辑,在最后添加
sshd_enable="yes"
(3)ee /etc/ssh/sshd_config #编辑配置文件
PermitRootLogin yes #允许root登录
PasswordAuthentication yes #使用密码验证
PermitEmptyPasswords no #不允许空密码登录
/etc/rc.d/sshd start #启动ssh服务
/etc/rc.d/sshd restart #重启ssh
http://www.osyunwei.com/archives/3007.html
____________________________________________________________________________
1 在FreeBSD中执行
ssh-keygen -t dsa
可得到
/home/leakon/.ssh/id_dsa
/home/leakon/.ssh/id_dsa.pub
2 可以用 WinSCP 下载这个两个文件到本地,保存到
C:\Documents and Settings\leakon\Application Data\VanDyke\
这是 SecureCRT 在 Windows 的 leakon 用户的程序数据文件夹中生成的目录
我保存到:D:\ssh_tmp\freeBSD_Key_Login
3 打开会话选项,在 分类 中选择 SSH2,在右边的 身份验证 中选择 公钥(PublicKey),然后点击旁边的 属性(Properites),选择 使用会话公钥设置(注意:会话公钥)(Use session public key setting),在 使用身份文件(Use identify file) 的输入框中,选择刚才下载回来的 id_dsa,注意,id_dsa 和 id_dsa.pub 要保存在一起(两个文件取名任意,但必须符合 somekey 和 somekey.pub)
4 按照 /etc/ssh/sshd_config 中指定的公钥文件名 AuthorizedKeysFile .ssh/authorized_keys,修改本地公钥文件名,在FreeBSD中执行
cd /home/leakon/.ssh/
mv id_dsa.pub authorized_keys 另外一个id_dsa可以不动它。
至此,方法一大功告成,重新用 SecureCRT 连接一下试试,直接就登录好了吧
听师妹说是我们学校(中央民族大学理学院尤其是物理系)的老师普遍很变态很牛X,我考,果然很变态!
呵呵,特写此程序DownLoad!DownLoad,直接右键另存为即可!
编译好二进制便于测试:
test_windows.exe运行与windows
test_unix.out 运行与freebsd
自己编译的时候最好用tc3.*以上编译test.cpp...
呵呵,特写此程序DownLoad!DownLoad,直接右键另存为即可!
编译好二进制便于测试:
test_windows.exe运行与windows
test_unix.out 运行与freebsd
自己编译的时候最好用tc3.*以上编译test.cpp...
前言:日期在数据库处理中都是非常麻烦的事情。这里给出mysql中对日期函数的处理及应用
-- 作者:未知
-- 发布日期: 2005-05-27
对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。
这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK('1998-02-03');
-> 3
WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
mysql> select WEEKDAY('1997-11-05');
-> 2
DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。
mysql> select DAYOFMONTH('1998-02-03');
-> 3
DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。
mysql> select DAYOFYEAR('1998-02-03');
-> 34
MONTH(date)
返回date的月份,范围1到12。
mysql> select MONTH('1998-02-03');
-> 2
DAYNAME(date)
返回date的星期名字。
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'
MONTHNAME(date)
返回date的月份名字。
mysql> select MONTHNAME("1998-02-05");
-> 'February'
QUARTER(date)
返回date一年中的季度,范围1到4。
mysql> select QUARTER('98-04-01');
-> 2
WEEK(date)
WEEK(date,first)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许
你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,
从星期一开始。
mysql> select WEEK('1998-02-20');
-> 7
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8
YEAR(date)
返回date的年份,范围在1000到9999。
mysql> select YEAR('98-02-03');
-> 1998
HOUR(time)
返回time的小时,范围是0到23。
mysql> select HOUR('10:05:03');
-> 10
MINUTE(time)
返回time的分钟,范围是0到59。
mysql> select MINUTE('98-02-03 10:05:03');
-> 5
SECOND(time)
回来time的秒数,范围是0到59。
mysql> select SECOND('10:05:03');
-> 3
PERIOD_ADD(P,N)
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
mysql> select PERIOD_ADD(9801,2);
-> 199803
PERIOD_DIFF(P1,P2)
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。
mysql> select PERIOD_DIFF(9802,199703);
-> 11
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。
在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的
DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以
一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期
中返回“type”间隔。下表显示了type和expr参数怎样被关联: type值 含义 期望的expr格式
SECOND 秒 SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
DAY_HOUR 天和小时 "DAYS HOURS"
YEAR_MONTH 年和月 "YEARS-MONTHS"
HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅
包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
-> 20102
如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND
的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,
结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28
注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。
TO_DAYS(date)
给出一个日期date,返回一个天数(从0年的天数)。
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
FROM_DAYS(N)
给出一个天数N,返回一个DATE值。
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
DATE_FORMAT(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss AP M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
所有的其他字符不做解释被复制到结果中。
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。
TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。
其他修饰符产生一个NULL值或0。
CURDATE()
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的
上下文被使用。
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一
个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串
还是或数字上下文中被使用。
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条
目同样的修饰符。
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字
上下文中被使用。
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938
TIME_TO_SEC(time)
返回time参数,转换成秒。
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND
的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,
结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28
注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。
TO_DAYS(date)
给出一个日期date,返回一个天数(从0年的天数)。
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
FROM_DAYS(N)
给出一个天数N,返回一个DATE值。
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
DATE_FORMAT(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
所有的其他字符不做解释被复制到结果中。
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。
TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。
其他修饰符产生一个NULL值或0。
CURDATE()
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的
上下文被使用。
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一
个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串
还是或数字上下文中被使用。
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条
目同样的修饰符。
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字
上下文中被使用。
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938
TIME_TO_SEC(time)
返回time参数,转换成秒。
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
END
-- 作者:未知
-- 发布日期: 2005-05-27
对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。
这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK('1998-02-03');
-> 3
WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
mysql> select WEEKDAY('1997-11-05');
-> 2
DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。
mysql> select DAYOFMONTH('1998-02-03');
-> 3
DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。
mysql> select DAYOFYEAR('1998-02-03');
-> 34
MONTH(date)
返回date的月份,范围1到12。
mysql> select MONTH('1998-02-03');
-> 2
DAYNAME(date)
返回date的星期名字。
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'
MONTHNAME(date)
返回date的月份名字。
mysql> select MONTHNAME("1998-02-05");
-> 'February'
QUARTER(date)
返回date一年中的季度,范围1到4。
mysql> select QUARTER('98-04-01');
-> 2
WEEK(date)
WEEK(date,first)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许
你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,
从星期一开始。
mysql> select WEEK('1998-02-20');
-> 7
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8
YEAR(date)
返回date的年份,范围在1000到9999。
mysql> select YEAR('98-02-03');
-> 1998
HOUR(time)
返回time的小时,范围是0到23。
mysql> select HOUR('10:05:03');
-> 10
MINUTE(time)
返回time的分钟,范围是0到59。
mysql> select MINUTE('98-02-03 10:05:03');
-> 5
SECOND(time)
回来time的秒数,范围是0到59。
mysql> select SECOND('10:05:03');
-> 3
PERIOD_ADD(P,N)
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
mysql> select PERIOD_ADD(9801,2);
-> 199803
PERIOD_DIFF(P1,P2)
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。
mysql> select PERIOD_DIFF(9802,199703);
-> 11
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。
在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的
DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以
一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期
中返回“type”间隔。下表显示了type和expr参数怎样被关联: type值 含义 期望的expr格式
SECOND 秒 SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
DAY_HOUR 天和小时 "DAYS HOURS"
YEAR_MONTH 年和月 "YEARS-MONTHS"
HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅
包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
-> 20102
如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND
的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,
结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28
注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。
TO_DAYS(date)
给出一个日期date,返回一个天数(从0年的天数)。
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
FROM_DAYS(N)
给出一个天数N,返回一个DATE值。
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
DATE_FORMAT(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss AP M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
所有的其他字符不做解释被复制到结果中。
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。
TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。
其他修饰符产生一个NULL值或0。
CURDATE()
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的
上下文被使用。
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一
个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串
还是或数字上下文中被使用。
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条
目同样的修饰符。
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字
上下文中被使用。
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938
TIME_TO_SEC(time)
返回time参数,转换成秒。
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND
的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,
结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28
注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。
TO_DAYS(date)
给出一个日期date,返回一个天数(从0年的天数)。
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
FROM_DAYS(N)
给出一个天数N,返回一个DATE值。
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。
DATE_FORMAT(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
所有的其他字符不做解释被复制到结果中。
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。
TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。
其他修饰符产生一个NULL值或0。
CURDATE()
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的
上下文被使用。
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一
个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串
还是或数字上下文中被使用。
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条
目同样的修饰符。
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字
上下文中被使用。
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938
TIME_TO_SEC(time)
返回time参数,转换成秒。
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
END