【问题标题】:Pruning in SQL ServerSQL Server 中的修剪
【发布时间】:2019-03-13 17:15:27
【问题描述】:

我有一个超过 9000 万行的表,它的数据超过 3 年。我想保留星期一(或一周中的任何特定日期)添加的所有记录,并删除一年前添加的数据的剩余记录。

谁能帮我解决这个问题?

我面临的困难是整理周一(或一周中的任何特定日期)添加的数据

【问题讨论】:

  • 使用DATEPART。另外,您确定要删除旧数据吗?如果您只想查看星期一的记录,将其存档在某处会有什么问题吗?他们会使用DATEPART 查询它?
  • 请在运行查询之前进行备份
  • 谢谢大家 :) @TimBiegeleisen 数据归档需要当前表只保存周一记录

标签: sql database tsql sql-server-2008 database-management


【解决方案1】:

你可以使用日期部分

DATEPART(dw, '2007-04-21 ') = 2 //  day of the week.

DATENAME(weekday, '2007-04-21 ') = 'Monday'

更多内容请关注https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-2017

【讨论】:

  • 提示:( @@DateFirst + DatePart( weekday, SampleDate ) - 1 ) % 7 + 1 将始终返回一个从17 的整数,其中1 对应于星期日,无论DateFirstLanguage 的设置如何。
【解决方案2】:

正如蒂姆所说,你可以试试

datepart(weekday, your_date) = 2

检查日期是否为星期一(注意 1 为星期日)。或者你也可以试试

datename(weekday, your_date) = 'Monday'

明确设置工作日名称

【讨论】:

  • 比起DATEPART,我更喜欢DATENAME 建议,因为如果服务器语言不是英语,前者可能会返回other而不是Monday
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
相关资源
最近更新 更多