Как создать дату начала и дату окончания с SQL? - PullRequest
5 голосов
/ 10 января 2012
string st = '01/2012' (MM/yyyy)

Я хочу получить данные в период с 01.01.2012 по 31.01.2012

Как создать дату начала и дату окончания в соответствии с форматом месяца и года?

Например

st = 02/2012

Select * from table where dates between 01/02/2012 and 29/02/2012

Как сделать запрос на добавление начальной и конечной даты месяца?

Ответы [ 7 ]

3 голосов
/ 10 января 2012

Следующее должно дать вам последний день текущего месяца на sql-server-2000:

SELECT DATEADD(second,-1,DATEADD(month, DATEDIFF(month,0,GETDATE())+1,0))

Чтобы найти последний день месяца для данного месяца, попробуйте:

DECLARE @thisDate DATETIME
SET @thisDate = '06/27/2011'
SELECT DATEADD(second,-1,DATEADD(month, DATEDIFF(month,0,@thisDate)+1,0))
2 голосов
/ 10 января 2012

Это должно делать то, что вы хотите. Не уверен, что это самый простой способ или нет. @Parameter - это ваша строка, которую вы передаете.

DECLARE @Parameter VARCHAR(7)
DECLARE @DateStart DATETIME
DECLARE @DateEnd DATETIME

SET @DateStart = CAST('01/' + @Parameter AS DATETIME)
SET @DateEnd = DATEADD(DD, -1, DATEADD(MM, 1, @DateStart))

SELECT * FROM tblTable WHERE fldDate BETWEEN @DateStart AND @DateEnd
1 голос
/ 10 января 2012
SELECT *
FROM table
WHERE MONTH(dates) = 2
AND YEAR(dates) = 2012
1 голос
/ 10 января 2012

Это для MS SQL:

DECLARE @datestring varchar(7) = '01/2012';
DECLARE @dateStart varchar(10) =  CONVERT(varchar(10), '01/' + @datestring, 101);
DECLARE @dateEnd varchar(10) = CONVERT(varchar(10), DATEADD(DAY, -1, DATEADD(MONTH, 1, @dateStart)), 101);

SELECT 
    *
FROM 
    [StackTestDB].[dbo].[DateTable]
WHERE
    [DateCol] >= @dateStart AND [DateCol] <=  @dateEnd

В зависимости от формата ваших дат, поиграйтесь с 101, который ускоряет формат даты. (Обычно это 101 или 103, что дает ММ / дд / ггг или дд / мм / гггг)

1 голос
/ 10 января 2012

Попробуйте:

declare @st as varchar(10)
set @st = '01/2012'

select * 
from table 
where
    dates >= convert(datetime, '01/' + @st, 103) and
    dates < dateadd(mm, 1, convert(datetime, '01/' + @st, 103))

Возвращает все строки за указанный месяц (включая весь последний день месяца до полуночи).Знаки >= (включительно) и < (эксклюзив).Очень важно то, что при этом будет использоваться индекс по столбцу dates (если он создан).

1 голос
/ 10 января 2012

Это работает для меня в DB2

select (current date+1 month)-day(current date+1 month) days from sysibm.sysdummy1;

Редактировать: Функция текущей даты дает вам дату сегодня, вы можете заменить ее на свою дату ввода.

1 голос
/ 10 января 2012
declare @m int
set @m=2

declare @y int 
set @y=2012

declare @StartDate smalldatetime
declare @EndDate smalldatetime

set @StartDate=cast(@m as varchar(20))+'/'+'1/' +cast(@y as varchar(20)) 


print @StartDate

print datediff(day, @StartDate, dateadd(month, 1, @StartDate))

set @EndDate=cast(@m as varchar(20))+'/'+cast(datediff(day, @StartDate, dateadd(month, 1, @StartDate))as varchar(20))+'/' +cast(@y as varchar(20)) 

print @EndDate
...