把int类型日期转换为datetime类型日期

在维护一个网站,原开发者存储日期时,都是使用int数据类型,如20120218等。现Insus.NET获取这个字段做其它处理,得先需要把它们转为DateTime数据类型。

因此产生以下这个User-Defined Functions(自定义函数):

把int类型日期转换为datetime类型日期 udf_ConvertIntDatetime
CREATE  FUNCTION  [ dbo ]. [ udf_ConvertIntDatetime ]
 (
     @intDate  INT
 )  
RETURNS  DATETIME 
AS 
BEGIN 
     DECLARE  @RTV  DATETIME 
     SET  @RTV  =  CONVERT( DATETIMECAST( @intDate  AS  CHAR( 8)),  112
     RETURN  @RTV 
END

 

上面自定义函数中一个参数112,可以参考下链接http://www.cnblogs.com/insus/articles/1554836.html最后一句。自定义函数应用:

SELECT  [ id ], [ orderdate ], [ dbo ]. [ udf_ConvertIntDatetime ]( [ orderdate ]AS  [ Order_Date ]  FROM dbo. [ orders ] 

 

 结果:

把int类型日期转换为datetime类型日期

 

下面文字,更新于2012-02-18 17:10
发现原字段还有6位int的日期,年份只有两位,如110317等。因为Insus.NET还需要更新上面的自定义函数, 有关是使用参数12还得再参考上面链接。:

把int类型日期转换为datetime类型日期 udf_ConvertIntDatetime
ALTER  FUNCTION  [ dbo ]. [ udf_ConvertIntDatetime ]
 (
     @intDate  INT
 )  
RETURNS  DATETIME 
AS 
BEGIN 
    
     DECLARE  @RTV  DATETIME 
     SET  @RTV  =     CASE  LEN( @intDate)
     WHEN  6  THEN  CONVERT( DATETIMECAST( @intDate  AS  CHAR( 6)), 12)
     WHEN  8  THEN  CONVERT( DATETIMECAST( @intDate  AS  CHAR( 8)), 112)
     ELSE  NULL
     END
    
     RETURN  @RTV 
END

 

 演示:

把int类型日期转换为datetime类型日期

 

下面文字更新于2012-02-20 00:05

今天本是星期天,下午用户来电,说一些日期无法显示,显示为空。用户说一笔记录日期为010627时,它就显示为空。用户区域语言不一样,让该函数无法识别2位数的年份。只有指定DATEFORMAT才能正确显示日期。让Insus.NET起以前一个自定义函数,即可以解决此问题:http://www.cnblogs.com/insus/archive/2011/06/30/2094398.html

把int类型日期转换为datetime类型日期 View Code
SELECT  [ dbo ]. [ ConvertDate ] ( ' 010627 ', ' yy-MM-dd ')
SELECT  [ dbo ]. [ ConvertDate ] ( ' 010627 ', ' yyyy-MM-dd ')

 

把int类型日期转换为datetime类型日期

 

你可能感兴趣的:(DateTime)