CREATE  FUNCTION dbo.FN_BinDateToDateTime (
@i_bin_time binary(4)
) RETURNS datetime
AS
BEGIN
DECLARE @v_datetime datetime
DECLARE @v_strtime varchar(20)
SELECT @v_strtime = '200' + CAST(CAST(@i_bin_time as int) as varchar(20))
SELECT @v_strtime = SUBSTRING(@v_strtime,1,4)
+'-'+SUBSTRING(@v_strtime,5,2)
+'-'+SUBSTRING(@v_strtime,7,2)
+' '+SUBSTRING(@v_strtime,9,2)
+':'+SUBSTRING(@v_strtime,11,2)
SELECT @v_datetime = CAST(@v_strtime as datetime)
RETURN @v_datetime
END
但是到了2010年就要出错,请高手帮下忙吧 小弟感激不尽

解决方案 »

  1.   

    CREATE  FUNCTION dbo.FN_BinDateToDateTime ( 
    @i_bin_time binary(4) 
    ) RETURNS datetime 
    AS 
    BEGIN 
    DECLARE @v_datetime datetime 
    DECLARE @v_strtime varchar(20) 
    SELECT @v_strtime = '20' + REPLICATE('0',2-len(CAST(CAST(@i_bin_time as int) as varchar(20)))) + CAST(CAST(@i_bin_time as int) as varchar(20)) 
    SELECT @v_strtime = SUBSTRING(@v_strtime,1,4) 
    +'-'+SUBSTRING(@v_strtime,5,2) 
    +'-'+SUBSTRING(@v_strtime,7,2) 
    +' '+SUBSTRING(@v_strtime,9,2) 
    +':'+SUBSTRING(@v_strtime,11,2) 
    SELECT @v_datetime = CAST(@v_strtime as datetime) 
    RETURN @v_datetime 
    END 
      

  2.   

    SELECT @v_strtime = CAST(CAST((@i_bin_time+2000) as int) as varchar(20))就这么简单。
      

  3.   


    @i_bin_time binary(4) 楼主你定义的是这种类型,返回值为十六进制。10 就变成0A了。前两天我们TIMIC卡门锁系统也碰到这种问题,所有门都打不开。做程序员真的要考虑周全些。