SNAFU pribadi pergi ke DBA


Bagi mereka yang tidak tahu, SNAFU adalah karakter dalam kartun patriotik militer yang dibuat oleh orang Amerika selama perang. Mencungkil ini, karena kebodohan alamiah, jatuh ke dalam situasi bencana sepanjang waktu dan, sebagai suatu peraturan, mati pada akhir seri. Benar, dalam seri berikutnya dia kembali hidup - dalam hal ini, dia dapat dianggap sebagai nenek moyang Kenny dari South Park.

Ketika merekrut orang untuk posisi pengembang SQL server, saya sering tunduk pada bagaimana mereka menjawab pertanyaan. Saya siap memberi tahu mereka YA jika saya belum diselamatkan oleh tugas kecil satu-baris yang disarankan rekan saya. Sungguh menakjubkan betapa banyak tugas ini dapat menghasilkan dalam satu string SQL. Dan sekarang sang kandidat sudah berjalan menyapu dengan antusias. Rake, seperti yang akan Anda lihat, ada banyak. Tentu saja, tidak satu orang yang mengumpulkan SEMUA kemungkinan garu. Tetapi untuk menunjukkan semuanya, saya membutuhkan SNAFU.

Jadi, tugasnya:

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

  • Apa yang ingin dilakukan oleh pembuat kode?
  • Mengapa ini tidak bisa berfungsi seperti yang saya inginkan?
  • Bagaimana memperbaikinya?

Percakapan saya dengan SNAFU akan melangkah lebih jauh.

SNAFU: Jelas, permintaan memilih data untuk satu hari.
Saya: Dan apa yang salah dengan itu?
SNAFU: Ya, ada tanda bintang, akan lebih baik untuk menunjukkan bidang ...
Saya: Dan apa yang disimpan dalam tabel, bagaimana menurut Anda? Dan jenis bidang apa itu DT?
SNAFU: Acara ... Waktu acara ... Jadi datetime
Me: Yah?
SNAFU: (setelah musyawarah) aah, jadi jika ada waktu, maka catatan akan dibaca hanya setelah tengah malam
I: luar biasa

Kami telah mengatasi dua poin pertama dan beralih ke yang ketiga.

Saya: Bagaimana cara memperbaikinya?
SNAFU: di mana konversi (varchar, DT, 102) = '2020/02/03' (Rake # 1 bekerja)
I:Tetapi apakah itu tidak mengganggu Anda bahwa ini dapat mencegah SQL menggunakan indeks DT jika ada?
SNAFU: di mana DT antara '2020/02/03' dan '2020/02/04' (Rake # 2 bekerja)
Saya: Apakah Anda terganggu bahwa data untuk nomor berikutnya (tengah malam) juga akan dimasukkan di sini?
SNAFU: di mana DT antara '2020/02/03' dan '2020/02/03 23:59:59' (Rake # 3 bekerja)
I: Apakah Anda ingin berurusan dengan bank di mana ada detik ketika ada uang, yang kamu sumbangkan akan hilang?
SNAFU: di mana DT antara '2020/02/03' dan '2020/02/03 23: 59: 59.999' (Rake # 4 bekerja)
I: Apakah Anda tahu bahwa 23: 59: 59.999 akan dibulatkan lagi hingga tengah malam?
SEMRAWUT:Tepatnya, ada granularity adalah 13-16ms. Lalu: di mana DT antara '2020/02/03' dan '2020/02/03 23: 59: 59.986' (Rake # 5 bekerja)
Saya: Yaitu, jika DT menjadi waktu kecil atau waktu2, akankah semuanya berhenti bekerja?



Saya tidak tahu mengapa transisi ke saat di bawah ini begitu sulit. Pada kenyataannya, lebih dari separuh kandidat benar-benar putus asa. Terkadang Anda harus meminta. Tapi SNAFU kami menyiksa sebuah solusi:

SNAFU: di mana DT> = '2020/02/03' dan DT <'2020/02/04'
Me: Akhirnya.

SNAFU menyeka keringat dari dahinya. Sekarang adalah waktunya untuk tembakan kontrol.
Saya: Dan apa lagi yang benar-benar buruk di sini?
SNAFU bergetar. Tangannya gemetaran. Tatapannya mengembara.
Saya: Apakah 3 Februari atau 2 Maret?

Tampak bagi saya bahwa tugas-tugas seperti itu memberikan pemahaman jauh lebih cepat daripada "tugas-tugas pengujian" idiot. Dalam hal ini, SNAFU mungkin orang yang baik, tetapi ia bekerja sedikit dengan data temporal, dan lebih baik tidak membiarkannya masuk ke sektor keuangan.


All Articles