1. SQL / Говнокод #12951

    −167

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    CASE
       WHEN TO_CHAR (SYSDATE, 'hh24mi') >= '0000'
              AND TO_CHAR (SYSDATE, 'hh24mi') <= '0559'
       THEN
           TO_CHAR (SYSDATE - 1, 'yyyymmdd')
       ELSE
           TO_CHAR (SYSDATE, 'yyyymmdd')
    END

    Oracle.
    Наверное хотели sysdate - 6/24

    Запостил: slbsomeone, 29 Апреля 2013

    Комментарии (4) RSS

    • При чём тут минус 6h? До шести утра вчерашний день.
      Хотя, да... TO_CHAR(TRUNC(SYSDATE-6/24), 'YYYYMMDD')
      Ответить
      • Скорее to_char(sysdate - 6/24, 'YYYYMMDD')

        Меня настолько терзали сомнения, что я написал запрос для провеки равно
        ли значение вычисляемое CASE значению простого вычитания для каждой секунды 2012, 2013 годов.
        Ответить
        • Да, обрезать нет смысла, лишнее и так убирается при конвертировании. Проверять каждую секунду тоже не было смысла (по той же причине), достаточно "стыки" проверить (смена суток, 6 утра, смена суток со сменой года).
          Другое дело, что с CASE логика очевиднее, но это исключительно для случаев, когда нельзя дописать комментарий.
          Ответить
    • Его как обухом по голове ударили эти слова. Точнее одно слово - "Димоша". Так его называла только мама, да и мало кто знает, что есть такое ласково-уменьшительное имя. Он замер, постоял, чтобы прийти в себя, и вернулся на свою койку.
      Ответить

    Добавить комментарий