据说只有程序猿才能看懂的小幽默

1.老婆给当程序员的老公打电话:下班顺路买十个包子,如果看到卖西瓜的,买一个。当晚老公手捧一个包子进了家门…老婆怒道:你怎么只买一个包子?!老公甚恐,喃喃道:因为我真看到卖西瓜的了。”

2.一程序员去面试,面试官问:”你毕业才两年,这三年工作经验是怎么来的?!”程序员答:”加班。”

3.宝宝数学很好,2岁就可以从1数到10了。后来,我告诉他0比1还小。今天吃饺子,我说:”宝宝,你数数你想吃几个饺子?””0,1,2,3。”一边说着一边拿起一个饺子,”这是第0个。”老婆怒吼:”下一代还是做程序员的命!”

4.某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。 一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势, 定神片刻,泼墨挥毫,郑重地写下一行字:hello world。

5.问:程序员最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥(bug)

6.程序猿要了3个孩子,分别取名叫Ctrl、Alt 和Delete,如果他们不听话,程序猿就只要同时敲他们一下就会好的…

7.如果没能一次成功,那就叫它1.0版吧。

8.今天在公司听到一句惨绝人寰骂人的话:”你TM就是一个没有对象的野指针!”

9.莫愁前路无知己,总有bug跟着你。

10.如果世界让程序员落魄,程序员就让世界沉默

11.开源客栈日暮,入栈不知归路。debug无尽头,误入代码深处,单步,单步,发现bug无数。

12.横眉冷对万行码,俯首甘为码字牛。问君能有几多愁,恰似调完代码改需求。

13.bug知时节,上线乃发生。随风潜入夜,404无声。野径云俱黑,孤窗火独明。晓看公司处,一只程序猿。

14.程xx遭遇车祸成植物人,医生说她活下来的希望只有万分之一,唤醒更为渺茫。她的同事和亲人没放弃,并根据程xx对testing痴迷的作风,每天都在她身边念:”你测的模块上线后回滚了…”奇迹发生了,程xx醒来第一句话:确认那模块是我测的?

15.两个程序员,

A:哥们,最近手头紧,能借点钱?
B:成啊,要多少?
A:一千成不?
B:咱俩谁跟谁!给你凑个整,这一千零二十四,拿去吧。
16.一个程序员在海滨游泳时溺水身亡。他死前拼命的呼救,当时海滩上有许多救生员,但是没有人救他。因为他一直大喊”F1!””F1!”,谁都不知道”F1″究竟是什么意思。

17.

1)程序员其实可痛苦的了……需求一做一改,一个月就过去了;嚎~需求再一改一调,一季度就过去了;嚎~
2)、程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了;
3)、程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了;
4)、程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了;
5)、程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!
18.有一天一个程序员见到了上帝.

上帝: 小伙子,我可以满足你一个愿望.
程序员: 我希望中国国家队能再次打进世界杯.
上帝: 这个啊!这个不好办啊,你还说下一个吧!
程序员: 那好!我的下一个愿望是每天都能休息6个小时以上.
上帝: 还是让中国国家打进世界杯.
19.做了几年程序员,厌烦了,想换行了。于是天天猛敲回车键。

20.问:一对程序员恋人面对面坐着工作,你猜他们在做什么?答:面向对象编程。

21.十年生死两茫茫,写程序,到天亮。 千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。 领导每天新想法,天天改,日日忙。 相顾无言,惟有泪千行。 每晚灯火阑珊处,程序员,又加班,工作狂.

22.世界上最远的距离,是我在if里你在else里,虽然经常一起出现,但却永不结伴执行

23.十行代码九个警告八个错误竟然敢说七日精通六天学会五湖四海也不见如此三心二意之项目经理简直一等下流。

24.程序猿:我的第一个问题是,对于我第二个和第三个问题,你可不可以只用’能’和’不能’来回答?

老板:”OK!”
我的第二个问题是,如果我的第三个问题是我能不能涨工资?那么你对于我的第三个问题的答案能不能和第二个问题的答案一样?
老板:。。。。。。
25.《程序员的雨巷》开着MyEclipse,独自彷徨在悠长、悠长又寂寥的雨巷,我希望逢着一个和我一样的调试代码的姑娘。她是有需求一样的凌乱,设计一样的荒唐,测试一样的忧愁, 在代码里哀怨,哀怨又彷徨;她彷徨在这寂寥的雨巷。

26.一女同学在食堂吃饭时,一程序猿凑到旁边,”同学,我能和你说话不,我已经一个月没和女生说话了。

27.一同学问我,软件外包是什么。解释了几句还没明白,遂想了一下:包工头知道吧?顿悟!

28.正在码代码ing,医院回来的同事一脸的苦逼样子,问他怎么了?他回答:得了类风湿性关节炎了,我怕会遗传给下一代啊。我一脸的问号:谁说类风湿性关节炎能遗传的?丫一脸诧异:类不是继承的吗?

29.真的勇士,敢于直面惨淡的warning、敢于正视淋漓的error。

30.某小偷潜入某IT公司欲行窃,没想到始终有人,他只好等啊等啊等,结果始终有一大拨人在加班。过了一个月,小偷终于逮到机会溜出来,同伙问:去哪了?小偷:在IT公司呆了一个月。同伙:收获不错吧?小偷苦笑:别TM提了,三十个大夜下来,我现在已经学会写程序了。

31.一同事最近bug特别多,假装关切问他有多少个bug,他回答:10。过几日,再问,他回答:10。我:”这么多天过去了,怎么一点变化都没有?”,他:”哪里没有变化啊,以前是十进制,现在变成十六进制。

32.我很奇怪客栈这个词。难道后入住的必须先退房吗?

33.假如生活欺骗了你,找50个程序员问问为什么编程;假如生活让你想死,找50个程序员问问BUG改完了没有;假如你觉得生活拮据,找50个程序员问问工资涨了没有;假如你觉得活着无聊,找50个程序员问问他们一天都干了什么!

34.话说,决定一个程序员跳槽与否的关键因素是他前同事的现工资~

35.程序员最憋屈的事情就是:你辛辛苦苦熬夜写了一个风格优雅的源文件,被一个代码风格极差的同事改了且没署名,以至于别人都以为你是写的。。。

36.昨天晚上做梦梦见我得到了九阴真经的武功秘籍,打开第一页一看,我X,赫然写着口诀”hello world!”

37.前端工程师说,我去交友网站找女朋友去了。朋友问,找到了么?工程师说,找到了他们页面的一个bug……

38.十年生死两茫茫,百度兴,谷歌亡。微博火,推特无处话凄凉。纵使相逢应不识,MSN死,微信狂。人人佳缘喜还乡,京东刘,泡妞强。淘宝在,海淘忙。视频互相打,论坛靠色狼,陌陌帮上床。聊到马云断肠处,余额宝,怕是活不长。

39.程序员被叫去修电脑,正确的回答方式是:『哦,不好意思啊,我是一个程序员,我并不会修电脑,我其实只会把电脑搞出问题来,老实说,你电脑上的这些问题都是我们程序员搞出来的』

40.时至今日都是我咎由自取,找不到对象就是找不到对象,与任何人无关。程序员生涯的苦文明用语,造就了我娇羞内向,不问红尘的脾气,导致今日岌岌可危的地步,我今天愿意承担一切后果。其实,我很感谢你们让我跌倒在今天,而不是在我依旧文明用语丝的将来,我必须重新梳理自己,坦然面对并修复bug!本码农,生活中写就了一段满是bug的代码,我辜负了老板和老板的老板

41.我应聘了一个大型IT公司的”网络攻击研究部经理” 职务, 面试官问我: 你觉得自己为什么适合这份工作? 我: 我黑进你们的系统, 给我自己发了面试通知.

42.老婆让我教她编程,想看看网页是怎么做的,于是我教她用JQuery, PHP 做些简单的小程序。在动手写出些Hello World的小程序后,老婆说:”编程也不是很难嘛,但是你们这些程序员太装逼了,无论前端还是后端的程序,代码里到处都是”$”,你们是想钱想疯了是吧?

43.有个学生在人人发状态:”找不到对象找不到对象找不到对象找不到对象找不到对象”。我回复:”请确定该对象存在,并正确拼写其名称和路径名”。另一个学生回复:”真的无法获取对象就去声明一个基类吧!

44.昨晚梦见男朋友和别的女人在逛街,梦里我的第一反应是查源代码…结果调试半天查不出来为什么显示的是那个女人不是我,最后含泪把那个女人给注释掉了,再一运行就是我男朋友自己逛街了…醒来囧字脸呆了很久…囧rz

45.一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。

46.如果你的朋友是it民工的,年底吃饭聚餐就不要AA制了,你请他吧,主动买单是不错的选择。千万不要当着他的面提年终奖,出国旅游,买房买车等等。生活不易,需要互相扶持前行。

47.设计师看了程序实现出的界面内心百感交集,就像把女儿嫁给了小混混,最后生出了一窝小流氓似的。

48.真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。

49.祝大家在以后的日子里. 男生象Oracle般健壮; 女生象win7般漂亮; 桃花运象IE中毒般频繁; 钱包如Gmail容量般壮大, 升职速度赶上微软打补丁 , 追女朋友像木马一样猖獗, 生活像重装电脑后一样幸福, 写程序敲代码和聊天一样有激情。

50.老板说了一个笑话,全办公室哄堂大笑,有抹眼泪的,有捂肚子的,有捶桌子的。只有小猿没笑,我边笑边问他:你怎么不笑呀?他说:我已经辞职了!

51.程序员最讨厌的四件事:写注释、写文档、别人不写注释、别人不写文档 …

52.一个士兵爱上一个公主,公主告诉他,如果他愿意连续100个晚上守在她的阳台下,她就接受他。于是士兵照做了,他等了一天,两天,三天……直到第九十九天,士兵离开了。为什么士兵不再坚持最后一天?答案很凄美——因为那个士兵是程序员,他从0开始数的.

53.一晚下班回家,一民警迎面巡逻而来。突然对我大喊:站住!

民警:int类型占几个字节?
我:4个。
民警:你可以走了。
我感到很诧异。
我:为什么问这样的问题?
民警:深夜还在街上走,寒酸苦逼的样子,不是小偷就是程序员……

SQL Server——自定义的fn_Split函数

修正SQL2000超长ntext的bug。

CREATE FUNCTION [dbo].[Fn_split] (@expression NTEXT,
                                  @delimiter  NVARCHAR(2) = ',')
RETURNS @expressionstable TABLE (
  [DUMMY] NVARCHAR(4000))
AS
  BEGIN
      DECLARE @currentindex INT
      DECLARE @nextindex INT
      DECLARE @returntext NVARCHAR(4000)
      DECLARE @datalength INT
      IF @expression IS NULL
        BEGIN
            INSERT INTO @expressionstable
                        ([DUMMY])
            VALUES      (NULL)
        END
      ELSE
        BEGIN
            SELECT @datalength = Datalength(@expression) / 2
            IF @datalength = 0
              INSERT INTO @expressionstable
                          ([DUMMY])
              VALUES      ('')
            ELSE
              BEGIN
                  SELECT @currentindex = 1
                  WHILE( @currentindex <= @datalength )
                    BEGIN
                        SELECT @nextindex = Charindex(@delimiter, Substring(@expression, @currentindex, 4000))
                                            + @currentindex
                        /*关键在于Charindex第二个参数最长为8000,所以每次需重新截取下一部分*/
                        IF( @nextindex = @currentindex )
                          SELECT @nextindex = @currentindex + @datalength
                        SELECT @returntext = Substring(@expression, @currentindex - 1, @nextindex - @currentindex)
                        INSERT INTO @expressionstable
                                    ([DUMMY])
                        VALUES      (@returntext)
                        SELECT @currentindex = @nextindex + 1
                    END
              END
        END
      RETURN
  END
CREATE FUNCTION [dbo].[Fn_split] (@str       VARCHAR(MAX),
                                  @separator VARCHAR(10))
RETURNS TABLE
AS
    RETURN
      (SELECT T0.DUMMY
       FROM   ( (SELECT [DUMMY] = CONVERT(XML, '<DUMMY>'
                                             + Replace(@str, @separator, '</DUMMY><DUMMY>')
                                             + '</DUMMY>')) T1
                OUTER APPLY (SELECT DUMMY = N.v.value('.', 'NVARCHAR(4000)')
                             FROM   T1.[DUMMY].nodes('/DUMMY') N(v)) T0 ))

用法:

SELECT * FROM fn_split('1,2,3,4,5', ',');

重弹Transact-SQL的随机数

Transact-SQL的随机数主要有:

RAND:返回一个介于 0 到 1(不包括 0 和 1)之间的伪随机 float 值。如果未指定 seed,则 SQL Server 数据库引擎随机分配种子值。 使用同一个种子值重复调用 RAND() 会返回相同的结果。对于一个连接,如果使用指定的种子值调用 RAND(),则 RAND() 的所有后续调用将基于使用该指定种子值的 RAND() 调用生成结果。

NEWID:创建 uniqueidentifier 类型的唯一值。NEWID 对每台计算机返回的值各不相同。

CHECKSUM:返回按照表的某一行或一组表达式计算出来的校验和值,用于生成哈希索引。CHECKSUM 值取决于排序规则。使用不同排序规则存储的相同值将返回一个不同的 CHECKSUM 值。(竟然可以把字符串转为数字!!!)

因为RAND()使用同一个种子值重复调用 RAND() 会返回相同的结果,所以会造成了一个后果,SELECT到所有列全部是同一个值,如果这个值需要同其它值进行计算,那就无法真正的随机了。

此时就需要CHECKSUM(NEWID())甚至RAND(CHECKSUM(NEWID()))出场了。

具体怎么用,多试就知道了。

[抛砖引玉]换个思路解决SQL经典问题(二):时间区间-按年分月统计

声明:本篇文章的SQL语句为了体现作者的思路,并非最优,请根据实际需要进行优化。

曾经帮别人解决一个这样的问题:

e_class_table

CREATE TABLE [dbo].[E_Classes] ([ClassID] varchar(12) NOT NULL ,[BeginDate] date NULL ,[EndDate] date NULL ,[StudentCount] smallint NULL);
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'01', N'2011-10-07', N'2012-03-11', N'49');
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'02', N'2012-04-05', N'2012-06-20', N'23');
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'03', N'2012-05-01', N'2012-07-03', N'46');
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'04', N'2013-03-08', N'2013-06-12', N'42');
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'05', N'2013-09-19', N'2013-10-26', N'78');
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'06', N'2013-11-21', N'2014-01-09', N'44');
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'07', N'2013-12-27', N'2014-02-06', N'36');
INSERT INTO [dbo].[E_Classes] ([ClassID], [BeginDate], [EndDate], [StudentCount]) VALUES (N'08', N'2014-02-28', N'2014-06-20', N'52');

要求按年和月分别统计全部课程的统计每个月的人天次,即:

class_total

计算方法为 (每门课在当月的有效天数*人数)的总和,如2014年01月的应该为 课程06的 2014-01-01~2014-01-09共计9天*44人=396人天 再加上 课程07的2014-01-01~2014-01-31共计31天*36人=1116人天,那么2014年01月的人天为 396+1116=1512人天次。

这个问题看上去挺麻烦的,但是我们可以换个思路去考虑,先建一张序号表:

CREATE TABLE [dbo].[E_Sequence]([Sequence_ID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_E_Sequence] PRIMARY KEY CLUSTERED ([Sequence_ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]);
SET IDENTITY_INSERT [dbo].[E_Sequence] ON
INSERT INTO [dbo].[E_Sequence] (Sequence_ID)
SELECT number FROM [master]..[spt_values] WHERE  type = 'P'
UNION ALL
SELECT number + 2048 FROM [master]..[spt_values] WHERE  type = 'P'
SET IDENTITY_INSERT [dbo].[E_Sequence] OFF

那。。。这张序号表是干什么用的呢?看看下面就知道了:

SELECT Dateadd(day, Sequence_id, '2011-1-1') AS Class_Date FROM E_Sequence

通过这个语句,我们可以生成一个从2011年01月01日开始的4000天,我们将用到这个查询来将课程表的时间段,拆分到每一天去:

SELECT Year(Class_Date)  AS Class_Year,
       Month(Class_Date) AS Class_Month,
       StudentCount
FROM   (SELECT Dateadd(day, Sequence_id, '2011-1-1') AS Class_Date
        FROM   E_Sequence) t1,
       E_Classes t2
WHERE  t1.Class_Date BETWEEN t2.BeginDate AND t2.EndDate

看看效果:

class_split

OK,这样,是不是就很明了了呢?“年”字段有了,“月”字段有了,“学生数”是不是就可以简单地加了?然后再一个行列转换就可以实现了(SQL2000请自行转为Case When End):

SELECT Class_Year      AS ??,
       Isnull([1], 0)  AS ??,
       Isnull([2], 0)  AS ??,
       Isnull([3], 0)  AS ??,
       Isnull([4], 0)  AS ??,
       Isnull([5], 0)  AS ??,
       Isnull([6], 0)  AS ??,
       Isnull([7], 0)  AS ??,
       Isnull([8], 0)  AS ??,
       Isnull([9], 0)  AS ??,
       Isnull([10], 0) AS ??,
       Isnull([11], 0) AS ???,
       Isnull([12], 0) AS ???
FROM   (SELECT Year(Class_Date)  AS Class_Year,
               Month(Class_Date) AS Class_Month,
               studentcount
        FROM   (SELECT Dateadd(day, Sequence_id, '2011-1-1') AS Class_Date
                FROM   E_Sequence) t1,
               e_classes t2
        WHERE  t1.Class_Date BETWEEN t2.begindate AND t2.enddate) t 
        PIVOT (Sum(studentcount) FOR Class_Month IN
        ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) tpivot

看到了吧?有时,引入一张外表,可以让我们的思路更清楚。

如果将

SELECT Dateadd(day, Sequence_id, '2011-1-1') AS Class_Date FROM E_Sequence

这句生成的查询,直接做成一张日期的序列表再加上索引的话,那在性能上会快更多,具体优化就不多讲了。

继续留个尾巴:

请只统计2012年07月16日到2013年06月15日之间,排除双休日的每个月的人天次。

[抛砖引玉]换个思路解决SQL经典问题(一):按每半小时统计

声明:本篇文章的SQL语句为了体现作者的思路,并非最优,请根据实际需要进行优化。

在开发的过程中,我们常常会遇到类似这种按每半小时统计数量的需求:

CREATE TABLE [dbo].[PerHalfHour]([CallInTime] [smalldatetime] NULL, [Result] [int] NULL);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:20:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:38:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:43:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:49:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:07:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:07:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:10:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:16:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:41:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:44:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:52:00', 1);

只统计其中的一部分并不难:

SELECT CallInTime_Hour,
       CallInTime_Minute,
       Count(*) AS CallInTime_Count
FROM   (SELECT Datepart(HOUR, CallInTime)             AS CallInTime_Hour,
               Datepart(MINUTE, CallInTime) / 30 * 30 AS CallInTime_Minute
			   /*??SQL ??/??=?? ??????????*/
        FROM   [PerHalfHour]
        WHERE  CallInTime >= '2014-01-01'
               AND CallInTime < '2014-01-02') t
GROUP  BY CallInTime_Hour,
          CallInTime_Minute
ORDER  BY CallInTime_Hour,
          CallInTime_Minute

统计结果为:


但是实际需求可能要求显示全部24小时的统计,这时我们只要加一张外联表就可以了:

CREATE TABLE [dbo].[Sequence_HalfHour]([sequence_time] [nvarchar](20) NULL,[sequence_hour] [int] NULL,[sequence_minute] [int] NOT NULL);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'00:00:00~00:29:59', 0, 0);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'00:30:00~00:59:59', 0, 30);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'01:00:00~01:29:59', 1, 0);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'01:30:00~01:59:59', 1, 30);
...
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'23:00:00~23:29:59', 23, 0);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'23:30:00~23:59:59', 23, 30);

然后用这个外联表去Left Join上一个查询就OK:

SELECT t0.sequence_time            AS ???,
       Isnull(CallInTime_Count, 0) AS ??
FROM   sequence_halfhour t0
       LEFT JOIN (SELECT CallInTime_Hour,
                         CallInTime_Minute,
                         Count(*) AS CallInTime_Count
                  FROM   (SELECT Datepart(HOUR, CallInTime)             AS CallInTime_Hour,
                                 Datepart(MINUTE, CallInTime) / 30 * 30 AS CallInTime_Minute
                          /*??SQL ??/??=?? ??????????*/
                          FROM   [PerHalfHour]
                          WHERE  CallInTime >= '2014-01-01'
                                 AND CallInTime < '2014-01-02') t
                  GROUP  BY CallInTime_Hour,
                            CallInTime_Minute) t1
         ON t0.sequence_hour = t1.CallInTime_Hour
            AND t0.sequence_minute = t1.CallInTime_Minute

查看结果:

留个尾巴:

第一张表里有个Result字段,请用SQL语句输出以下表格:

callintime_result

Centos Minimal系统安装

在VMWare或VirtualBox中安装Centos Minimal,这一步没什么可说的,注意网络连接设置为桥接模式,可以自动通过宿主机正常连接网络了。

以下为必要设置:

1. 启动网络:
#ifconfig eth0 up;dhclient eth0

2. 设置开机自动启动网络连接:
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
检测修改下列几项配置,没有的项手动添加,保存退出。
NM_CONTROLLED=no
ONBOOT=yes
BOOTPROTO=dhcp

3. 添加机器别名:
#vi /etc/sysconfig/network
保证要有:
NETWORKING=yes
HOSTNAME=namenode
保存退出。

4. 安装必须组件,可自行添加其他常用软件:
#yum install vim wget zip unzip man gcc make setuptool

5. 设置网络别名映射记录:
# vi /etc/hosts
192.168.14.100 namenode
保存退出。

6. 禁用SELINUX:
#vi /etc/selinux/config
设置SELINUX=disabled,保存退出。

7. 关闭防火墙:
#/sbin/service iptables stop
设置开机不启动
#chkconfig –level 35 iptables off

8. 设置SSH无密码访问
#ssh-keygen -t rsa
一路回车即可。

9. 将公钥加入到本机root的authorized_keys中,可以实现本机ssh无密码访问:
#cd /root/.ssh
#cat id_rsa.pub > authorized_keys
测试登陆自身节点
#ssh namenode
若想无密码访问其他主机,则需要将公钥id_rsa.pub远程备份到authorized_keys中,如:
#scp ~/.ssh/id_rsa.pub root@192.168.0.10:~/.ssh/authorized_keys

10. 安装JDK:
从官网下载32版本的linux版本,网上很多人都建议安装在/usr/java目录下。
或者运行以下任何一个:
#yum install java-1.6.0-openjdk
#yum install java-1.6.0-openjdk-devel
设置环境变量,编辑/etc/profile文件:
#vi /etc/profile
在最后添加设置 JAVA_HOME 环境变量以及类路径(注意:根据自己装的jdk版本号修改):
export JAVA_HOME=/usr/java/jdk1.6.0_31
export JRE_HOME=/usr/java/jdk1.6.0_31/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
使用yum install使用以下设置:
export JAVA_HOME=”/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64″
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
保存退出,使环境生效
#source /etc/profile

11. 准备工作做完了,准备工作完毕,重启一下:
#reboot

其它可能用到的操作:

1. 关闭不需要的服务:
@for SERVICES in abrtd acpid auditd avahi-daemon cpuspeed haldaemon mdmonitor messagebus udev-post; do chkconfig ${SERVICES} off; done

2. 创建一般用户:
@useradd 用户名
@passwd 用户名

3. vi命令保存退出:
:wq

4. vi命令不保存退出:
:q!

5. 切换到root用户:
#su – root

6. 给jdk安装程序运行权限:
#chmod u+x jdk_*.bin

7. 安装完jdk后查看版本:
#java -version

其它参考资料:
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
http://hadoop.apache.org/common/docs/current/cluster_setup.html

上百句“俗话”,让你智商归零

许多人,说话论事的时候,经常喜欢引用一些“俗话”。
  可是,我不得不提醒各位:“俗话”一定就是至理名言么?“俗话”一定就是金玉良言么?
  不一定哟。
  还别不信!只要看看上百句“俗话”,就立刻能够让你智商归零!看看哈:

  俗话说:男子汉大丈夫,宁折不屈!
  可俗话又说:男子汉大丈夫,能伸能屈!《荀子.不苟》

  俗话说:亡羊补牢,未为迟也!《战国策.楚策》
  可俗话又说:亡羊补牢,为时已晚!

  俗话说:宰相肚里能撑船!(清.李宝嘉《官场现形记》第二十七回)
  可俗话又说:有仇不报非君子!

  俗话说:人不犯我,我不犯人!(黄易《大唐双龙传》第三十四卷)
  可俗话又说:先下手为强,后下手遭殃!(元.关汉卿《单刀会》)

  俗话说:兔子不吃窝边草!(高阳《胡雪岩全传平步青云》)
  可俗话又说:近水楼台先得月!(宋.俞文豹《清夜录》)

  俗话说:瘦死的骆驼比马大!(《红楼梦》刘姥姥语)
  可俗话又说:拔了毛的凤凰不如鸡!

  俗话说:宁可玉碎,不能瓦全!《北齐书.元景安传》
  可俗话又说:留得青山在,不怕没柴烧!(《初刻拍案惊奇》卷二十二)

  俗话说:人不可貌相,海水不可斗量!《淮南子.泰族训》
  可俗话又说:人靠衣裳马靠鞍!(唐.李贺《马诗》)

  俗话说:浪子回头金不换!(明.李渔《十二楼》)
  可俗话又说:狗改不了吃屎!(教育部成语典修订本)

  俗话说:苦海无边,回头是岸!(宋.朱熹《朱子语类》卷五十九)
  可俗话又说:开弓没有回头箭!

  俗话说:退一步海阔天空!
  可俗话又说:狭路相逢勇者胜!《史记.廉颇蔺相如列传》

  俗话说:三百六十行,行行出状元!
  可俗话又说:万般皆下品,唯有读书高!(北宋.汪洙《神童诗》)

  俗话说:书到用时方恨少!(陆游)
  可俗话又说:百无一用是书生!(清.黄景仁《杂感》)

  俗话说:金钱不是万能的!
  可俗话又说:有钱能使鬼推磨!(晋.鲁褒《钱神论》)

  俗话说:天无绝人之路!(元.无名氏《货郎担》第四折)
  可俗话又说:天网恢恢,疏而不漏!《老子》

  俗话说:出淤泥而不染!(宋.周敦颐《爱莲说》)
  可俗话又说:近朱者赤,近墨者黑!(晋.傅玄《太子少傅箴》)

  俗话说:捉贼捉赃,捉奸捉双!(宋.胡太初《昼帘绪论.治狱》)
  可俗话又说:欲加之罪,何患无辞!《左传.僖公十年》

  俗话说:贫贱不能移!《孟子.滕文公下》
  可俗话又说:人贫志短,马瘦毛长!(惟白《建中靖国续灯录》)

  俗话说:知无不言、言无不尽!(宋.苏洵《衡论.远虑》)
  可俗话又说:沉默是金、祸从口出!(唐.韩愈《杂说》)

  俗话说:青取之于蓝而胜于蓝!《荀子.劝学》
  可俗话又说:姜还是老的辣!

  俗话说:后生可畏!(孔子《论语.子罕》)
  可俗话又说:嘴上无毛、办事不牢!(清.李宝嘉《官场现形记》)

  俗话说:有缘千里来相会!(明.施耐庵《水浒传》)
  可俗话又说:不是冤家不聚头!(《红楼梦》贾母语)

  俗话说:在天愿作比翼鸟!在地愿为连理枝!(唐.白居易《长恨歌》)
  可俗话又说:夫妻本是同林鸟,大难来时各自飞!(明.冯梦龙《警世通言》)

  俗话说:得饶人处且饶人!(宋.俞文豹《唾玉集.常谈出处》)
  可俗话又说:纵虎归山,后患无穷!(晋.司马彪《零陵先贤传》)

  俗话说:善有善报,恶有恶报!《缨络经.有行无行品》
  可俗话又说:人善被人欺,马善被人骑!

  俗话说:一分耕耘、一分收获!
  可俗话又说:人无横财不富、马无夜草不肥!《名贤集》《增广贤文》

  俗话说:小心驶得万年船!
  可俗话又说:撑死胆大的,饿死胆小的!

  俗话说:量小非君子!
  可俗话又说:无毒不丈夫!(元.马致远《汉宫秋》)

  俗话说:一寸光阴一寸金!(唐.王贞白《白鹿洞二首》)
  可俗话又说:寸金难买寸光阴!(《西洋记》第11回)

  俗话说:日久见人心!(元.无名氏《争报恩.第一折》)
  可俗话又说:人心隔肚皮!(清.钱彩《说岳全传》)

  俗话说:光阴似箭!(唐.韦庄《关河道中》)
  可俗话又说:度日如年!(宋.柳永《戚氏》)

  俗话说:己所不欲,勿施于人!《论语.卫灵公篇》
  可俗话又说:顺我者昌,逆我者亡!《庄子.盗跖》

  俗话说:邪不压正!
  可俗话又说:道高一尺,魔高一丈!《西游记.第五十回》

  俗话说:小不忍则乱大谋!《论语.卫灵公篇》
  可俗话又说:不蒸馒头蒸(争)口气!

  俗话说:人人为我,我为人人!
  可俗话又说:人不为己,天诛地灭!(《佛说十善业道经》第二十四集)

  俗话说:不怕人不敬,就怕己不正!
  可俗话又说:众口烁金,积毁销骨!《史记.张仪列传》

  俗话说:三个臭皮匠,胜过诸葛亮!
  可俗话又说:一个和尚挑水喝,两个和尚抬水喝,三个和尚没水喝!

  俗话说:君君臣臣父父子子!《论语.颜渊》
  可俗话又说:民为贵,社稷次之,君为轻!《孟子.尽心下》

  俗话说:百事孝为先!
  可俗话又说:忠孝不能两全!

  俗话说:人无远虑,必有近忧!《论语.卫灵公》
  可俗话又说:今朝有酒今朝醉!(唐.罗隐《自遣》诗)

  俗话说:家事国事天下事,事事关心!(明.顾宪成《名联谈趣》)
  可俗话又说:老婆孩子热炕头!

  俗话说:人定胜天!(宋.刘过《龙州集.襄阳歌》)
  可俗话又说:天意难违!《山海经》

  俗话说:愚公移山《列子.汤问》
  可俗话又说:胳膊拧不过大腿!

  俗话说:哪里跌倒哪里爬起!
  可俗话又说:一失足成千古恨!(明.杨仪《明良记》)

  俗话说:路不平有人铲,事不平有人管!
  可俗话又说:自家扫取门前雪,莫管他人屋上霜!(宋.陈元靓《事林广记.警世格言》)

  俗话说:人多力量大!
  可俗话又说:人多嘴杂!

  俗话说:买卖不成仁义在!
  可俗话又说:亲兄弟,明算帐!

  俗话说:一个好汉三个帮!
  可俗话又说:靠人不如靠己!

  俗话说:众志成城!《国语.周语下》
  可俗话又说:众口难调!《名贤集》

  俗话说:笨鸟先飞!(元.关汉卿《陈母教子》第一折)
  可俗话又说:枪打出头鸟!(清.《增广贤文》)

  俗话说:双喜临门!
  可俗话又说:乐极生悲!《淮南子.道应训》

  俗话说:人挪活,树挪死!
  可俗话又说:滚石不生苔,转业不生财!

  俗话说:嫁鸡随鸡,嫁狗随狗!(《红楼梦》八十一回)
  可俗话又说:男怕选错行,女怕嫁错郎!

  俗话说:手心手背都是肉!(越剧《碧玉簪》)
  可俗话又说:十个手指还不一般齐!

  俗话说:打开天窗说亮话!
  可俗话又说:犹抱琵琶半遮面!(白居易《琵琶行》)

  俗话说:明人不做暗事!
  可俗话又说:兵不厌诈!《韩非子.难一》

  俗话说:不入虎穴,焉得虎子!《后汉书.班超传》
  可俗话又说:老虎屁股摸不得!(《毛泽东选集》第三卷)

  俗话说:背靠大树好乘凉!
  可俗话又说:树倒猢狲散!(宋.庞元英《谈薮.曹咏妻》)

  俗话说:打狗还得看主人!(明.兰陵笑笑生《金瓶梅词话》第七十九回)
  可俗话又说:杀鸡给猴看!

  俗话说:天上不会掉馅饼!
  可俗话又说:瞎猫碰着死耗子!

  俗话说:塞翁失马,焉知非福!
  可俗话又说:福无双至,祸不单行!(《水浒会传》三十七回)

  俗话说:清水出芙蓉!(唐.李白)
  可俗话又说:水至清则无鱼!《大戴礼记.子张问入宫篇》

  俗话说:车到山前必有路!
  可俗话又说:不撞南墙不回头!

  俗话说:条条大路通罗马!
  可俗话又说:一条道走到黑!

  俗话说:礼轻情谊重!
  可俗话又说:礼多人不怪!

  俗话说:滴水之恩当涌泉相报!(清.朱用纯《增广贤文.朱子家训》)
  可俗话又说:过河拆桥、卸磨杀驴、兔死狗烹、鸟尽弓藏!

  俗话说:人往高处走!
  可俗话又说:爬得高,摔得重!

  俗话说:一口唾沫一个钉!
  可俗话又说:人嘴两张皮,咋说咋有理!

  ……

  现在,你终于明白啥叫“俗话”了吧!“俗话”其实就是“人嘴两张皮,咋说咋有理”的东西。如果你被“俗话”给忽悠了,却还以为这就是所谓的“辩证法”,这不是智商归零又是啥?

Kin_Db_Pager 2.0.2

下载地址:

https://github.com/jorkin/kin_db_pager

因为某些原因,有点写不下去了,谁要就拿去改改用吧。(可能会不定期更新)

Feature:
•为优化MSSQL加了N多垃圾代码,提高百万数据量时的速度。
•添加CreateIndex()方法,可以在DEBUG模式下帮助数据库新手创建简单索引。
•添加GetRows()方法。
•临时删除Oracle相关代码。
•生成分页列表时不再采用字符串串联,改用数组。
•其他小修改。

顺便推荐下coldstone的EasyASP框架:http://www.easyasp.cn/

VMware关于libcurl.dll报错的临时解决方法

问题签名:
问题事件名称: BEX
应用程序名: vmplayer.exe
应用程序版本: 8.0.0.18997
应用程序时间戳: 4e52db5e
故障模块名称: libcurl.dll
故障模块版本: 0.0.0.0
故障模块时间戳: 4abd1a53
异常偏移: 00034fc7
异常代码: c0000409
异常数据: 00000000
OS 版本: 6.1.7601.2.1.0.256.1
区域设置 ID: 2052
其他信息 1: 7567
其他信息 2: 75676c2955a4f8264b1d0f239c72dd6e
其他信息 3: ba67
其他信息 4: ba6701246b2d5dd66af2b3996d45d78e

临时解决方法就是尝试把网卡禁用,再启动,能够启动再恢复网卡。