【问题标题】:Extract data by day from SQL Server从 SQL Server 按天提取数据
【发布时间】:2019-09-29 13:20:24
【问题描述】:

我需要按天(24 小时)从 SQL Server 数据库中获取所有值。我在TestAllData 表中有时间戳列,我想选择仅对应于特定日期的数据。

例如,有DateTime 类型的时间戳,例如'2019-03-19 12:26:03.002', '2019-03-19 17:31:09.024''2019-04-10 14:45:12.015',所以我想加载2019-03-19 当天的数据和2019-04-10 当天的数据。基本上,需要获取具有相同日期的DateTime值。

这是否可以使用 DatePartDateDiff 之类的功能?

我怎样才能整体解决这个问题?

在这种情况下,我不知道时间戳和一天结束之间的确切小时差(因为 1 天有各种时间戳),我需要从时间戳中提取日期本身。之后,我需要按天或类似的方式对数据进行分组并逐块获取。例如:

'2019-03-19' - 1200 条记录 '2019-04-10' - 3500 条记录 '2019-05-12' - 10000 条记录等

我正在寻找一种更通用的解决方案,不提供时间戳(如“2019-03-19”)作为边界或在 where 子句中,因为问题不在于简单地按某个日期过滤数据!!

更新:在我的数据集中,我有大约 1,000,000 条记录和 100 多个唯一日期。我正在考虑提取一组唯一日期,然后在循环中运行一个查询,其中数据将按提供的日期过滤。它看起来是这样的:

select * from TestAllData where dayColumn = '2019-03-19'
select * from TestAllData where dayColumn = '2019-04-10'
select * from TestAllData where dayColumn = '2019-05-12'
...

我可能会在我的代码中使用这个查询,所以我可以在 Scala 函数的循环中运行它。但是,我不确定在性能方面是否可以运行单独的唯一日期提取查询。

【问题讨论】:

  • 样本数据、预期结果和您的尝试将在这里有所帮助。我会接受 Forpas 发布的答案(现已删除),但你说它没有那么简单,所以我同意他们的评论:“如果不是那么简单,那么你为什么要问一个简单的问题?”向我们提供所有详细信息,以便我们为您提供帮助。没有他们我们就做不到,而您只能靠自己来解决这个问题。
  • 你不使用函数——你只是使用正确的边界。不要让懒惰引领你的发展。今天是什么日子?我打字时是 2019 年 5 月 12 日上午 7:49。你如何找到“今天”的所有行?您使用一天开始的下限(例如,>= '20190512')和明天开始的适当上限(例如,here 详细讨论
  • @SMor 边界可能是一个很好的解决方案,但我如何使用动态变化的时间戳来定义它们。我只想运行一个非常通用的查询,而不指定像“20190512”这样的确切时间戳。因此可以在不绑定特定数据的情况下运行它
  • @Larnu 我给了他一个明确的理由,为什么建议的解决方案不适用于我的情况。单纯的讨论问题,在这里营造这样一个有毒的环境不太好。
  • 我一点也不有毒,也无意,Cassie,我只是在说明我们需要什么。我们没有任何这些,因此如果猜测或提供最终无法满足您的需求的答案,我们可以做到最好。如果我们有一个完整的问题(MCVE),那么志愿者利用他们的空闲时间来帮助您将能够更轻松地为您提供帮助,并且您会更快地得到答案。对每个人都有好处。

标签: sql-server timestamp datediff


【解决方案1】:

根据您是否希望能够处理所有日期(而不仅仅是一个子集),实现这一目标的最简单方法之一是使用演员表:

;with cte as (SELECT cast(my_datetime as date) as my_date, * from TestAllData)
SELECT * FROM cte where my_date = '2019-02-14'

请注意,将 datetime 转换为 date 时,时间会被截断,即仅提取日期部分。

正如我所说,这是否有效取决于您的需求,因为在过滤数据之前,所有记录中的所有日期时间值都将被转换为日期。但是,如果您想选择多个日期(而不是仅选择一两个日期),总体而言它可能会更快,因为它会读取整个表格一次,然后为您提供一个列,您可以在该列上更有效地进行过滤。

但是,如果这是一个永久的要求,我可能会使用一个持久化的计算列,这实际上意味着转换最初只进行一次,然后只有在相应的值发生变化时才会再次进行。对于大表,我也会强烈考虑在计算列上建立索引。

【讨论】:

    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多