数据库专家答疑目录

  |  手机版

收藏网站

投稿QQ:1745232315

IT专家网,汇聚专业声音 解析IT潮流 IT专家网,汇聚专业声音 解析IT潮流

网络

专家视点在现场环球瞭望
IT专家网 > 数据库子站 > 数据库专家答疑目录

利用SQL Server UDF把整数格式转换为日期格式

作者:唐小若出处:IT专家网2009-03-24 10:15

  在我们开始之前,让我们先来看看正在处理的与run_date和run_time域格式相关的到底是什么。虽然这个技巧只包含把run_date和run_time转换成一种有用的格式,但是我们将在后面的技巧中处理run_date和run_time日期转换的问题。

  

     SELECT SJ.[name], SJH.[run_date], SJH.[run_time]

  FROM msdb.dbo.[sysjobhistory] SJH INNER JOIN [msdb].dbo.[sysjobs] SJ ON SJH.[job_id] = SJ.[job_id]

  WHERE SJH.[step_id] = 0

  ORDER BY SJ.[name]

  上面的查询产生了下面的结果:

  

  图一

  正如你所看到的,run_date是按照YYYYMMDD的格式存储的。它存储成整数格式,而不是字符串,因为它是微软SQL Server内datetime数据类型底下的根格式。我猜,在系统表逻辑迁移到系统目录视图方面,msdb数据库享受和主数据库一样的待遇只是时间问题,这将支持动态管理视图。最终,解决作业和备份结构以及存储在madb数据库的相关历史和配置的动态管理视图将成为DMVs最终扩展的一个完美的目标;当然我偏离题目了,现在言归正传。

  如果我们想在SQL Server内的任何系统函数中使用这些信息,那么接下来发生的就取决于一个日期函数。我指的是实例的DATEADD(),DATEDIFF(),DATENAME()或者DATEPART()函数。那么让我们来选择一个例子,看看它是怎么进行的。

  

    SELECT SJ.[name], MAX(SJH.[run_date]) AS [last_run_date],

  MAX(DATEDIFF(dd, SJH.[run_date], GETDATE())) AS [Days Since Last Run]

  FROM msdb.dbo.[sysjobhistory] SJH INNER JOIN [msdb].dbo.[sysjobs] SJ ON SJH.[job_id] = SJ.[job_id]

  WHERE SJH.[step_id] = 0

  GROUP BY SJ.[name]

  ORDER BY SJ.[name]

   上面的查询产生下面的错误:

  Msg 8115, LEVEL 16, State 2, Line 1

  Arithmetic overflow error converting expression TO data type datetime.

相关文章

关键词: 评论

责任编辑:包春林

专题推荐

原创文章

微博互动

白皮书

网警备案