Private SNAFU geht an DBA


Für diejenigen, die es nicht wissen, ist SNAFU eine Figur in militärischen patriotischen Cartoons, die von Amerikanern während des Krieges erstellt wurden. Diese Aushöhlung gerät aufgrund natürlicher Idiotie ständig in katastrophale Situationen und stirbt in der Regel am Ende der Serie. In der nächsten Serie ist er zwar wieder am Leben - in diesem Sinne kann er als entfernter Vorläufer von Kenny aus South Park angesehen werden.

Bei der Rekrutierung von Mitarbeitern für die Position als SQL Server-Entwickler war ich oft unterwürfig, wie sie Fragen beantworteten. Ich war bereit, ihnen JA zu sagen, wenn ich nicht durch eine kleine einzeilige Aufgabe gerettet worden wäre, die mein Kollege vorgeschlagen hatte. Es ist erstaunlich, wie viel diese Aufgabe in einer einzelnen SQL-Zeichenfolge erzeugen kann. Und jetzt geht der Kandidat schon begeistert harken. Ein Rechen, wie Sie sehen werden, gibt es viele. Natürlich hat keine einzige Person ALLE möglichen Rechen gesammelt. Aber um sie alle zu zeigen, brauchte ich SNAFU.

Also die Aufgabe:

SELECT * FROM Events where DT='2020/02/03'

  • Was wollte der Autor des Codes tun?
  • Warum kann das nicht so funktionieren wie ich wollte?
  • Wie man es repariert?

Mein Gespräch mit SNAFU wird weiter gehen.

SNAFU: Offensichtlich wählt die Abfrage Daten für einen Tag aus.
Ich: Und was ist daran falsch?
SNAFU: Nun, es gibt ein Sternchen, es wäre besser, die Felder anzugeben ...
Ich: Und was ist in der Tabelle gespeichert, was denkst du? Und was für ein Feld ist DT?
SNAFU: Ereignisse ... Zeit der Ereignisse ... Also datetime
Me: Nun?
SNAFU: (nach Überlegung) aah, wenn also Zeit ist, werden die Notizen erst nach Mitternacht gelesen.
I: ausgezeichnet

Wir haben die ersten beiden Punkte überwunden und fahren mit dem dritten fort.

Ich: Wie kann ich das beheben?
SNAFU: wobei convert (varchar, DT, 102) = '2020/02/03' (Rechen Nr. 1 hat funktioniert)
I:Aber stört es Sie nicht, dass dies verhindern kann, dass SQL den DT-Index verwendet, wenn er vorhanden ist?
SNAFU: Wo DT zwischen '2020/02/03' und '2020/02/04' (Rake # 2 hat funktioniert)
Ich: Stört es Sie, dass die Daten für die nächste Nummer (Mitternacht) auch hier enthalten sein werden?
SNAFU: wo DT zwischen '2020/02/03' und '2020/02/03 23:59:59' (Rake # 3 hat funktioniert)
I: Möchten Sie sich mit einer Bank befassen, bei der es eine Sekunde gibt, wenn es Geld gibt ? Was Sie beigetragen haben, geht verloren?
SNAFU: Wo DT zwischen '2020/02/03' und '2020/02/03 23: 59: 59.999' (Rechen Nr. 4 hat funktioniert)
I: Wissen Sie, dass 23: 59: 59.999 bis Mitternacht wieder gerundet wird?
SNAFU:Genau dort beträgt die Granularität 13-16ms. Dann: Wo DT zwischen '2020/02/03' und '2020/02/03 23: 59: 59.986' (Rechen Nr. 5 hat funktioniert)
Ich: Das heißt, wenn DT klein oder zeitlich wird2, funktioniert dann alles nicht mehr?



Ich weiß nicht, warum der Übergang zum folgenden Moment so schwierig ist. In Wirklichkeit ist mehr als die Hälfte der Kandidaten dumm verzweifelt. Manchmal muss man dazu auffordern. Aber unsere SNAFU hat eine Lösung gefoltert:

SNAFU: wobei DT> = '2020/02/03' und DT <'2020/02/04'
Ich: Endlich.

SNAFU wischt sich den Schweiß von der Stirn. Jetzt ist die Zeit für einen Kontrollschuss.
Ich: Und was ist hier sonst noch so schlimm?
SNAFU zittert. Seine Hände zittern. Der Blick wandert.
Ich: Ist es der 3. Februar oder der 2. März?

Es scheint mir, dass solche Aufgaben das Verständnis viel schneller vermitteln als die idiotischen "Testaufgaben". In diesem Fall mag SNAFU ein guter Kerl sein, aber er hat wenig mit zeitlichen Daten gearbeitet, und es ist besser, ihn nicht in den Finanzsektor zu lassen.


All Articles