mssql时间里秒怎么忽略只想要纯粹那部分咋弄才行呢
- 问答
- 2026-01-02 17:25:54
- 3
关于在SQL Server中处理时间数据、忽略秒和更小单位,直接提取纯粹的日期和小时-分钟部分,这是一个很实际的需求,很多人会遇到从数据库里取出时间数据时,只想看到到分钟,2023-10-27 14:30”,后面的秒和毫秒显得多余。
根据微软官方文档和常见的SQL Server技术社区(如Stack Overflow)的讨论,最直接、最常用的方法是使用CONVERT函数配合特定的样式代码。
核心方法:使用CONVERT函数
CONVERT函数是SQL Server中用于数据类型转换的强大工具,特别是在格式化日期和时间方面,它的基本语法是CONVERT(data_type, expression, style)。style参数是一个数字,它决定了日期和时间如何被转换成字符串。
要得到“年-月-日 时:分”的格式,我们主要使用样式代码120,然后截取到我们需要的位置。
-
思路是分两步走:
- 第一步: 先用
CONVERT函数和样式代码120,将日期时间值转换为标准格式的字符串,样式代码120对应的格式是“yyyy-mm-dd hh:mi:ss”(24小时制)。GETDATE()返回‘2023-10-27 14:35:42.123’,转换后变成字符串‘2023-10-27 14:35:42’。 - 第二步: 由于我们连秒都不想要,所以需要从这个结果字符串中,只截取前16个字符(因为‘yyyy-mm-dd hh:mi’正好是16个字符),在SQL Server中,可以使用
LEFT函数来实现截取。
完整的写法看起来是这样的:
SELECT LEFT(CONVERT(VARCHAR, GETDATE(), 120), 16) AS PureDateTime;
这条语句会返回像‘2023-10-27 14:35’这样的结果,这里的
GETDATE()可以替换成你的任何日期时间类型的列名。
- 第一步: 先用
为什么这是最常用的方法?
根据很多资深开发者在技术论坛里的分享,这种方法之所以流行,有以下几个原因:
- 简单直观:逻辑非常清晰,先转成标准字符串格式,然后截取需要的部分,任何人一看基本就能明白在做什么。
- 兼容性好:
CONVERT函数和LEFT函数在SQL Server的所有现代版本中都存在且工作方式一致,不用担心版本兼容性问题。 - 性能尚可:对于大多数不是极端要求性能的场景,这种转换和截取的操作开销是可以接受的。
其他可行的替代方案
虽然上面的方法最普遍,但SQL Server也提供了其他途径来实现类似效果,你可以根据喜好和具体情况选择。
-
使用FORMAT函数(SQL Server 2012及以后版本)
FORMAT函数更加强大和灵活,它允许你使用.NET框架的格式字符串来格式化数据,它的写法更接近于自然语言。 要格式化成“年-月-日 时:分”,可以这样写:
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm') AS PureDateTime;
优点:代码非常简洁,意图明确,可读性高,你可以轻松地改变格式,比如改成‘dd/MM/yyyy HH:mm’也很方便。 缺点:根据微软文档和社区经验,
FORMAT函数的性能通常比CONVERT函数要差一些,因为它背后调用了.NET的CLR功能,在对大量数据进行查询或者在高并发场景下,可能需要考虑这个性能损耗。 -
通过日期计算“抹零” 还有一种思路是利用数学计算,把秒和毫秒部分“减掉”,我们可以计算出从原始时间戳到当前分钟开始的秒数,然后从原始时间中减去这个秒数。
SELECT DATEADD(SECOND, -DATEPART(SECOND, GETDATE()), GETDATE()) AS PureDateTime;
这个方法返回的仍然是一个
DATETIME类型的值,显示时可能还是会带“.000”的毫秒(取决于你的客户端工具),但它的时间部分确实已经被设置为当前小时的当前分钟的第0秒。 优点:结果是真正的日期时间类型,可以继续参与日期计算。 缺点:代码稍显复杂,而且如果毫秒部分也必须要精确到0,还需要再减去毫秒部分(DATEADD(MILLISECOND, -DATEPART(MILLISECOND, GETDATE()), ...)),会更繁琐。
总结与选择建议
对于“如何忽略秒,只要纯粹的年月日时分”这个问题,综合来看:
- 如果你追求的是最佳的兼容性和良好的性能,并且输出结果是字符串也能接受,那么使用
LEFT(CONVERT(..., 120), 16)是最稳妥、最经典的选择。 - 如果你的SQL Server版本是2012或更高,并且更看重代码的清晰易懂,数据量也不大,那么使用
FORMAT(..., 'yyyy-MM-dd HH:mm')会让你的SQL语句更易读易维护。 - 如果你后续还需要对这个结果进行日期运算(比如加减分钟),需要它保持日期时间数据类型,那么考虑使用 日期计算的方法。
需要提醒一点,所有这些方法得到的结果,在你用来做条件查询(比如WHERE子句)时,要特别注意,如果你对表中的日期时间列应用了这些函数,可能会导致数据库无法使用该列上的索引,从而引起全表扫描,降低查询速度,在这种情况下,更好的做法是使用范围查询,例如WHERE CreateTime >= '2023-10-27 14:30:00' AND CreateTime < '2023-10-27 14:31:00',而不是WHERE LEFT(CONVERT(VARCHAR, CreateTime, 120), 16) = '2023-10-27 14:30',这是在处理时间范围查询时一个非常重要的性能优化点。
本文由歧云亭于2026-01-02发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/73207.html
