SQL Server 计算两个时间相差

打印 上一主题 下一主题

主题 888|帖子 888|积分 2664

在 SQL Server 中,计算两个时间字符串之间的差值


  • 首先将这些字符串转换成日期/时间范例(如 datetime 或 datetime2)
  • 然后利用日期函数来计算它们之间的差别。
1、计算两个时间字符串之间的差值

案例:计算 starttime 和 endtime 两个时间点之间的时间差(以秒为单位)。
  1. test 表中有以下数据:
复制代码
starttimeendtime2024-10-12 10:00:002024-10-12 10:30:002024-10-12 11:00:002024-10-12 11:45:00 以下是完整的 SQL 语句:
  1. SELECT DATEDIFF(SECOND, CAST(starttime AS DATETIME), CAST(endtime AS DATETIME)) AS "时间差" FROM test;
复制代码
表明


  • CAST(starttime AS DATETIME):将 starttime 字符串转换为 DATETIME 范例。
  • CAST(endtime AS DATETIME):将 endtime 字符串转换为 DATETIME 范例。
  • DATEDIFF(SECOND, …):计算两个 DATETIME 值之间的秒数差。
执行上述查询后,效果将是:
时间差18002700 2、字符串转换成日期/时间范例

   假设 starttime 是一个 VARCHAR 范例的列,存储了形如 ‘2024-10-12 10:00:00’ 的字符串
  1. SELECT CAST(starttime AS DATETIME) AS StartTimeAsDatetime FROM test;
复制代码
  1. test是包含 starttime 列的表名。查询会返回一个新的列 StartTimeAsDatetime,其中包含了转换后的 DATETIME 值。
复制代码


  • 如果 starttime 的格式是 ‘yyyy-MM-dd HH:mm:ss’,那么可以直接转换。
  • 如果 starttime 的格式不准确,CAST 会失败并抛出错误。在这种情况下,你可能需要利用 CONVERT 函数,并指定样式代码来准确剖析日期时间字符串。
   比方,如果 starttime 的格式是 ‘MM/dd/yyyy HH:mm:ss’ , ‘10/12/2024 12:09:36’ 的字符串
  1. SELECT CONVERT(DATETIME, starttime, 2) AS StartTimeAsDatetime FROM test;
复制代码
  1. 2 是样式代码,表示输入的日期时间字符串格式为 'MM/dd/yyyy HH:mm:ss'
  2. 样式代码 2 实际上对应的是 'yy.mm.dd' 格式的日期,而不是包含时间部分的完整日期时间。
  3. 如果你的 starttime 字符串包含了时间部分,并且格式是 'MM/dd/yyyy HH:mm:ss',你应该使用样式代码 102 或其他适当的样式代码。
复制代码
以下是一些常见的日期时间样式代码:
样式代码日期格式102mm/dd/yyyy103dd/mm/yyyy104dd.mm.yyyy105dd-mm-yyyy106dd mon yyyy107mon dd, yyyy108hh:mi:ss109mon dd yyyy hh:mi:ss:mmmAM (or PM)110mm-dd-yyyy111yyyy/mm/dd112yyyymmdd113dd mmm yyyy hh:mi:ss:mmm(24h) 假设你的 starttime 字符串格式是 ‘MM/dd/yyyy HH:mm:ss’,你可以这样利用 CONVERT:
  1. SELECT CONVERT(DATETIME, starttime, 102) AS StartTimeAsDatetime FROM test;
复制代码
3、计算两个日期和时间之间的差值

案例:
计算 startdate 和 enddate 两个日期之间的天数差。
  1. test 表中有以下数据:
复制代码
startdateenddate2024-10-122024-10-152024-10-182024-10-22
  1. SELECT DATEDIFF(DAY, startdate, enddate) AS "天数差"
  2. FROM test;
复制代码


  • DATEDIFF(DAY, startdate, enddate):计算 startdate 和 enddate 之间的天数差。
  • AS “天数差”:为效果列指定一个别名,使其更具可读性。
执行上述查询后,效果将是:
天数差34 模板
  1. select DATEDIFF(unit, startdate, enddate) from test
复制代码


  • unit 是时间单位,可以是 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR 等。
  • startdate 和 enddate 是你要比力的两个日期/时间值。
  • 第二个日期比第一个日期早,效果将是一个负数

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表