按月分区的分区函数怎么写

belowzero 2017-03-28 05:45:17
存有10多年的数据表,想按月分区,分区函数怎么写呢?如果是 2010-1-1,2010-2-1 。。。,这样写,太臃肿了,有别的办法吗,谢谢!
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjl8008 2017-03-30
  • 打赏
  • 举报
回复
引用 5 楼 roy_88 的回复:
动态生成分区函数 e.g.
DECLARE @dt VARCHAR(50)= '20070301',@month INT,@Sql NVARCHAR(max)='';
SET @month=DATEDIFF(mm,@dt,GETDATE())


SET @Sql=(SELECT TOP (@month) ',DATEADD(Month, '+RTRIM(ROW_NUMBER()OVER(ORDER BY @month)-1)+' , @dt)' FROM sys.columns AS a,sys.columns AS b,sys.columns AS c FOR XML PATH(''))


SET @sql='CREATE PARTITION FUNCTION PF_Month(datetime)
AS RANGE RIGHT
FOR VALUES(
	'+STUFF( @Sql,1,1,'')+')'
EXEC sys.sp_executesql @Sql,N'@dt VARCHAR(50)',@dt
GO

SELECT * FROM sys.partition_functions
不明觉厉
中国风 2017-03-29
  • 打赏
  • 举报
回复
动态生成分区函数 e.g.
DECLARE @dt VARCHAR(50)= '20070301',@month INT,@Sql NVARCHAR(max)='';
SET @month=DATEDIFF(mm,@dt,GETDATE())


SET @Sql=(SELECT TOP (@month) ',DATEADD(Month, '+RTRIM(ROW_NUMBER()OVER(ORDER BY @month)-1)+' , @dt)' FROM sys.columns AS a,sys.columns AS b,sys.columns AS c FOR XML PATH(''))


SET @sql='CREATE PARTITION FUNCTION PF_Month(datetime)
AS RANGE RIGHT
FOR VALUES(
	'+STUFF( @Sql,1,1,'')+')'
EXEC sys.sp_executesql @Sql,N'@dt VARCHAR(50)',@dt
GO

SELECT * FROM sys.partition_functions
moudy 2017-03-29
  • 打赏
  • 举报
回复
SELECT DATEPART(MONTH,GETDATE())
空白桑 2017-03-28
  • 打赏
  • 举报
回复
你是想要每个月的汇总数据还是分月查询 ?
二月十六 版主 2017-03-28
  • 打赏
  • 举报
回复
10多年的数据都在用吗?备份数据,然后把正在用常用的数据留下,其他的删除。
吉普赛的歌 版主 2017-03-28
  • 打赏
  • 举报
回复
写个循环生成这些日期代码就是了, 又不是天天做这些事情, 有什么好怕的?

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧