C ++ - язык будущего убийцы ...
... динамических языков.
никто не владеет им, имеет растущий набор функций, таких как программирование во время компиляции (мета) или вывод типов, обратные вызовы без накладных расходов на вызовы функций, не реализует единый подход (мультипарадигма). Регулярные выражения POSIX и ECMAScript . несколько возвращаемых значений . Вы можете иметь именованных аргументов . и т. д.
В программировании все происходит очень медленно. JavaScript потребовалось 10 лет, чтобы оторваться от земли (в основном из-за производительности), и большинство людей, которые в нем программируют, все еще не получают его (классы в JS? c'mon!). Я бы сказал, что C ++ действительно начнет светить через 15-20 лет. мне кажется, что для C ++ (как языка, так и для поставщиков компиляторов) достаточно времени и критической массы программистов, которые сегодня пишут на динамических языках, чтобы сходиться.
C ++ должен стать более дружественным к программисту (ошибки компилятора, сгенерированные из шаблонов или время компиляции при их наличии), и программисты должны понять, что статическая типизация - это благо (это уже происходит, см. Другой ответ здесь, который утверждает, что хороший код, написанный на динамически типизированном языке, написан так, как если бы язык был статически типизирован).
Вот моя версия. Никаких манипуляций со строками или преобразований не требуется, всего по одному вызову функций DATEADD
, YEAR
и MONTH
:
DECLARE @test DATETIME
SET @test = GETDATE() -- or any other date
SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)
Если он вам нужен часто, оберните его во встроенный TVF, что очень быстро:
Мои 2 цента:
select DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(day,(0-(DATEPART(dd,'2008-02-12')-1)),'2008-02-12')))
Радж
Просто немного расширите формулу:
dateadd(day, -1,
dateadd(month, 1,
cast(month('5/15/2009') as varchar(2)) +
'/1/' +
cast(year('5/15/2009') as varchar(4)))
Вы можете получить дни в дате с помощью функции DAY () :
dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))