当前位置: 首页 > 面试题库 >

SQL Server中从日期和时间获取日期的最有效方法?

公孙驰
2023-03-14
问题内容

在MS SQL 2000和2005中,给定日期时间(例如‘2008-09-25 12:34:56’),获取仅包含‘2008-09-25’的日期时间的最有效方法是什么?


问题答案:

我必须承认,我以前从未见过Matt展示的下浮率转换。我不得不对此进行测试。

我测试了一个纯选择(它将返回日期和时间,而这不是我们想要的),这里是统治性解决方案(floor-float),这里提到了一个普通的“天真”方案(stringconvert),而这里提到的是使用(因为我认为这是最快的)。

我在运行Win 2003 SP2服务器的测试服务器MS SQL Server 2005上测试了查询,该服务器运行的Xeon 3GHz CPU在最大内存上运行(32位,因此约为3.5 Gb)。那天晚上我在这里,所以机器几乎没有负载空转。我已经把一切都交给了我自己。

这是我的测试运行中的日志,该日志是从一个大表中选择的,该表包含从毫秒到毫秒的时间戳。这个特定的数据集包含2.5年以上的日期。该表本身有1.3亿行,所以这就是为什么我限制在前100万行中的原因。

SELECT TOP 1000000 CRETS FROM tblMeasureLogv2 
SELECT TOP 1000000 CAST(FLOOR(CAST(CRETS AS FLOAT)) AS DATETIME) FROM tblMeasureLogv2
SELECT TOP 1000000 CONVERT(DATETIME, CONVERT(VARCHAR(10), CRETS, 120) , 120) FROM tblMeasureLogv2 
SELECT TOP 1000000 DATEADD(DAY, DATEDIFF(DAY, 0, CRETS), 0) FROM tblMeasureLogv2

SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 1 ms.

(1000000 row(s) affected) Table ‘tblMeasureLogv2’. Scan count 1, logical reads 4752, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times: CPU time = 422 ms, elapsed time = 33803 ms.

(1000000 row(s) affected) Table ‘tblMeasureLogv2’. Scan count 1, logical reads 4752, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times: CPU time = 625 ms, elapsed time = 33545 ms.

(1000000 row(s) affected) Table ‘tblMeasureLogv2’. Scan count 1, logical reads 4752, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times: CPU time = 1953 ms, elapsed time = 33843 ms.

(1000000 row(s) affected) Table ‘tblMeasureLogv2’. Scan count 1, logical reads 4752, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times: CPU time = 531 ms, elapsed time = 33440 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times: CPU time = 0 ms, elapsed time = 1 ms.

我们在这里看到什么?

让我们专注于CPU时间(我们正在研究转换),我们可以看到我们有以下数字:

Pure-Select:  422
Floor-cast:   625
String-conv: 1953
DateAdd:      531  

由此看来,DateAdd(至少在这种情况下)比现场直播方法要快一些。

在您去那里之前,我多次运行了此测试,查询的顺序已更改,结果相同。

这在我的服务器上有点奇怪吗?



 类似资料:
  • 问题内容: 我下面有日期数组 并想知道 最近的日期, 例如:最接近今天的日期。 我怎样才能做到这一点? 问题答案: 循环执行,将值转换为日期,然后将最新的值存储在var中。 诸如此类的东西…您就知道了如果您想获得今天之前的最新信息:

  • 问题内容: 如何从Python中的日期时间对象获取日期名称(例如星期一,星期二,星期三,星期四,星期五,星期六和星期日)? 因此,例如,应该给我。 问题答案: 有关datetime.now,datetime.strftime以及有关strftime的更多信息,请参见Python文档。

  • 我有两个日期字段: 开始日期和结束日期和临时日期。 我有一个列表,其中我在开始日期和结束日期之间返回了6条记录。我如何过滤记录并返回最接近临时日期的日期时间? 在示例记录中,我需要获得第二条记录,因为与临时日期相近。实例

  • 问题内容: 这是我要传递时间戳的Under函数,我只需要从时间戳返回的日期,而不是小时和秒。通过以下代码,我得到了- 这是我得到的输出。 但是我只需要这样的日期 有什么建议? 问题答案: 改用SimpleDateFormat: 更新 :Java 8解决方案:

  • 本文向大家介绍python获取当前日期和时间的方法,包括了python获取当前日期和时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python获取当前日期和时间的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 问题内容: 我们可以使用下面的行获取一年中的日期。 但是,我们如何获得一年中的某天的日期呢? 问题答案: 如果您知道年份,则可以获取DateComponents date属性,如下所示: 或使用DateFormatter