私人SNAFU进入DBA


对于那些不知道的人,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可能是个好人,但他很少处理时间数据,最好不要让他进入金融领域。


All Articles