sql server传参带出每月第一天
时间: 2024-07-14 21:00:55 浏览: 119
在 SQL Server 中,如果你想查询每个月的第一天,你可以使用 DATEADD 函数结合 DATEDIFF 和 DATEPART 函数来实现动态生成日期范围。当你需要传入参数来指定月份时,可以构造一个动态 SQL 查询。这里是一个基本的例子:
```sql
DECLARE @StartMonth INT = -- 你需要传入的月份(例如1表示一月)
@EndMonth INT = 12, -- 如果你想要查询整个一年,这里是12
DECLARE @FirstDay CURDATE() AS '1900-01-01', -- 设置一个初始日期,假设为公元1900年1月1日
DECLARE @Sql NVARCHAR(MAX) = N'';
WHILE @StartMonth <= @EndMonth
BEGIN
SET @Sql += N'
SELECT DATEADD(day, DATEDIFF(day, 1, @Date), ''' + CAST(@StartMonth AS VARCHAR(2)) + '''-01) AS FirstDayOfMonth
FROM (VALUES (@Date)) AS DateTable(Date)
';
SET @StartMonth += 1;
END;
EXEC sp_executesql @Sql, N'@Date datetime', @Date = @FirstDay; -- 运行动态生成的SQL
```
在这个例子中,`@StartMonth` 参数是你传入的月份,从1开始到12结束,`@FirstDay` 初始设置为1900年的1月1日(可以根据需求调整)。然后创建了一个动态 `@Sql` 变量,每次循环都会添加一条新的查询行,最后执行 `sp_executesql` 来运行这个动态查询。