2010-09-21 3 views
2

У меня есть параметр даты (@rptMonth), который выбран пользователем из календаря датпикера. Дата должна быть в первый день месяца. Независимо от того, что пользователь выбирает, я хотел бы превратить это в mm/01/yyyy. Например, мне нужен первый день месяца. Поэтому, если пользователь выбирает 06/22/2010, мне нужно включить его в 06/01/2010. Поэтому в моем запросе было бы что-то вроде WHERE YEAR_MONTH = DATEADD («m», датированный («m», «1900-01-01», @ RptMonth), «1900-01-01»), «mm/dd/yyyy ", но когда я пытаюсь это сделать, я получаю неправильный синтаксис рядом с ','. Не знаю, будет ли это работать.первый день того же месяца

ответ

5

Update:

select dateadd(month, datediff(month, 0, getdate()), 0) 

Older:

Попробуйте это:

declare @arbitraryDate datetime; 
set @arbitraryDate = getdate(); 
set @arbitraryDate = dateadd(dd, datediff(dd, 0, @arbitraryDate), 0) --strip time 
select dateadd(dd, -day(@arbitraryDate)+1,@arbitraryDate) --strip days 

Или это:

select cast(convert(varchar(6), getdate(), 112) + '01' as datetime) 
3

Это тоже должно работать:

SELECT CAST(CAST(YEAR(@pInputDate) AS VARCHAR(4)) + 
      CAST(MONTH(@pInputDate) AS VARCHAR(2)) + '01' AS DATETIME) 
+0

Я считаю, что '2010/12/12' зависит от культуры. Пока '20101212' нет. Я не знаю, почему я это знаю. –

+1

** Обновление **. 'set dateformat ydm; выберите cast ('2010/24/12' как дата-время) 'Там вы идете! Неоднозначность. Но независимо от параметра 'dateformat', этот запрос' select cast ('20101224' как datetime) 'будет работать нормально. –

+0

Ваш запрос также позволяет легко пройти месяц назад или вперед. Очень полезно! Определенно +1. –

Смежные вопросы