Sql server 按天从SQL Server提取数据

Sql server 按天从SQL Server提取数据,sql-server,timestamp,datediff,Sql Server,Timestamp,Datediff,我需要每天(24小时)从SQL Server数据库获取所有值。我在TestAllData表中有timestamps列,我想选择只对应于特定日期的数据 例如,有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值 这是否可以使用一些函数,如DatePa

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

例如,有
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值

这是否可以使用一些函数,如
DatePart
DateDiff

我怎样才能从整体上解决这个问题呢

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

“2019-03-19”-1200项记录 “2019-04-10”-3500条记录 “2019-05-12”-10000条记录等等

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

更新:在我的数据集中,我有大约1000000条记录和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函数的循环中运行它。但是,就性能而言,我不确定是否可以运行单独的唯一日期提取查询。

根据您是否希望能够处理所有日期(而不仅仅是子集),实现这一点的最简单方法之一是使用强制转换:

;with cte as (SELECT cast(my_datetime as date) as my_date, * from TestAllData)
SELECT * FROM cte where my_date = '2019-02-14'
注意:当转换datetime to date时,时间会被截断,即只提取日期部分

正如我所说,这是否有效取决于您的需要,因为所有记录中的所有datetime值都将在数据过滤之前转换为date。但是,如果您想选择几个日期(而不是一个或两个),它可能会更快,因为它会读取整个表一次,然后给您一列,您可以更有效地进行筛选


但是,如果这是一个永久性要求,我可能会使用一个持久化的计算列,这实际上意味着转换一开始只执行一次,然后仅在相应的值更改时再次执行。对于一个大表,我也会强烈地考虑计算列的索引。

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