对于那些不知道的人,SNAFU是美国人在战争期间创作的军事爱国漫画中的角色。由于自然的愚蠢,这种气刨总是陷入灾难性的境地,并且通常在系列结束时死亡。没错,在接下来的系列中,他又活着-从这个意义上讲,他可以说是来自南方公园的肯尼的远祖。在为SQL Server开发人员职位招聘人员时,我经常服从他们如何回答问题。我已经准备好告诉他们,如果我没有被同事建议的一站式小任务拯救了我,那就可以。令人惊讶的是,单个SQL字符串可以产生多少任务。现在候选人已经热情地走了耙。如您所见,耙子很多。当然,没有一个人收集所有可能的耙子。但是要显示所有这些,我需要SNAFU。因此,任务:SELECT * FROM Events where DT='2020/02/03'
- 代码的作者想做什么?
- 为什么这不能按我的意愿工作?
- 如何解决?
我与SNAFU的对话将更加深入。SNAFU:显然,查询选择了一天的数据。我:那怎么了?SNAFU:嗯,有一个星号,最好指明这些字段...Me:表格中存储了什么,您认为呢? DT是什么类型的字段?SNAFU:事件……事件时间……所以约会时间我:嗯?SNAFU :(经过深思熟虑)啊,所以,如果有时间的话,这些笔记只有在午夜I以后才能阅读:非常好,我们已经克服了前两点,然后继续讲到第三点。我:如何解决?SNAFU:其中convert(varchar,DT,102)='2020/02/03'(Rake#1起作用)I:但这是否会使SQL无法使用DT索引呢?SNAFU: DT在'2020/02/03'和'2020/02/04'之间的位置(第2耙有效)我:是否还会在此包括下一个数字(午夜)的数据,这是否使您感到困扰?SNAFU: DT在'2020/02/03'和'2020/02/03 23:59:59'之间的位置(第3号耙有效)I:您想和一家有钱的第二家银行打交道吗,您所贡献的将丢失?SNAFU: DT在“ 2020/02/03”和“ 2020/02/03 23:59:59.999”之间的位置(4号耙有效)I:您是否知道23:59:59.999将再次舍入到午夜?SNAFU:确切地说,粒度为13-16ms。然后:DT在'2020/02/03'和'2020/02/03 23:59:59.986'之间的位置(5号耙有效)我:也就是说,如果DT变为smalldatetime或datetime2,一切都会停止工作吗?
我不知道为什么过渡到现在如此困难。实际上,超过一半的候选人绝望。有时您必须提示。但是我们的SNAFU折磨了一个解决方案:SNAFU:其中DT> ='2020/02/03'和DT <'2020/02/04'Me:最后。SNAFU擦拭额头上的汗水。现在是时候进行控制射击了。我:还有什么不好的呢?SNAFU在发抖。他的手在颤抖。凝视着。我:是2月3日还是3月2日?在我看来,这些任务比愚蠢的“测试任务”能更快地理解。在这种情况下,SNAFU可能是个好人,但他很少处理时间数据,最好不要让他进入金融领域。