2012-01-10 229 views
4
string st = '01/2012' (MM/yyyy) 

我想01/01/2012和31/01/2012如何用SQL创建开始日期和结束日期?

之间获取数据如何按照年份和月份格式创建的开始日期和结束日期?

对于实例

st = 02/2012 

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

如何使加入该月的开始和结束日期的查询?

+1

什么数据类型** **是您的柱'dates'在SQL Server表??? – 2012-01-10 05:52:38

+3

另外:当使用字符串指定日期时,我会建议**总是**使用ISO-8601格式:'YYYYMMDD'(或者'YYYY-MM-DDTHH:MM:SS'随着时间的推移) - 这将适用于任何语言/区域设置为您的SQL Server - 其他任何依赖于这些设置和*可能会中断*如果这些设置是错误的...... – 2012-01-10 06:15:28

回答

3

下应该给你当月的最后一天的SQL服务器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

这应该做你想做的。不知道这是否是最简单的方法。 @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 
+0

它不会返回行'fldDate'是例如2012-01-31 08:23(st ='01/2012') - 确切地说,2012-01-31 00:00:00(独家)和2012-02-01之间不会返回任何行00:00:00 - 从月份的最后一天开始的记录。 – 2012-01-10 07:23:13

1
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 
1

这对我的作品在DB2

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

编辑: 当前日期功能,让你今天为止,你可以用你输入的日期替换此。

1

尝试:

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

这是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 

根据您的日期格式,玩弄这spesifies日期格式的101。 (通常,这是101或103,其给出了MM/DD/YYY或DD/MM /年)

1
SELECT * 
FROM table 
WHERE MONTH(dates) = 2 
AND YEAR(dates) = 2012 
相关问题