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

    −116

    1. 1
    2. 2
    DATEADD(day,DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,DATEADD(d,
    (day(EndDate)-1)*-1,EndDate))+1,0)))-1,DATEADD(d,(day(EndDate)-1)*-1,EndDate))

    Вот так в M$ SQL вычисляют последний день месяца.

    http://govnokod.ru/15606#comment223642

    Запостил: bormand, 01 Апреля 2014

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

    • показать все, что скрытоИли с математикой недоработал или с SQL переработал )

      DateAdd(day,-Day(@D),DateAdd(month,1,@D))
      Ответить
      • показать все, что скрыто31.01.2014 нормально обработает?
        Ответить
        • показать все, что скрытоКанешн, нет
          2014-01-28
          Ответить
          • показать все, что скрытоДа не учел
            select @D, DateAdd(day,-1,DateAdd(month,1,DateAdd(day,-Day(@D)+1,@D)))
            Ответить
            • показать все, что скрытоУгу, это верная конструкция.
              Я два варианта видел - через 3 DATEADD и через DATEADD(DATEDIFF(DATEADD)).

              И вообще, да, в SQL Server-e нет встроенной функции нахождения последнего дня в месяце, а ещё функции нахождения праздничного дня для разных стран согласно последнему законодательству и т.п.
              Но! Надо просто понять, что в транзакционной БД оно найух и не надо, а в аналитической применяются другие методы для работы с датами (см. тред по ссылке в начальном посте).
              Ответить
              • показать все, что скрытоСогласен. Я когда вижу аналитику в сторах это просто адд, десятки-сотни тысяч записей обрабатывают через курсоры, временные таблицы, по сотне-тысячу раз апдейтятся и инсертятся, врагу не пожелаешь. А потом плачут, что ну такой сложный бизнес-процесс, что суперсовременное железо не тянет. )))
                Ответить
              • показать все, что скрытопоявилась EOMONTH :)
                Ответить
                • показать все, что скрытоДа пофиг, я и предыдущими танцами с datediff и dateadd не пользовался и этой EOMONTH не буду пользоваться. Единственный раз, когда мне нужен был последний день месяца на транзакционной системе - это всё вылилось в сущий ад на хранимых процедурах.
                  Ответить
    • показать все, что скрытоТорранс вновь занес молоток, но на этот раз направил его себе в лицо. Эта жуткая пляска смерти продолжалась недолго, когда же она закончилась, образ Джека Торранса перестал существовать.
      Ответить
    • Руслан замолчал на несколько секунд, что-то обдумывая, а потом сказал:
      Ответить

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