【一千里加急】误差问题,再求一转换函数SQL语句,解决利马揭帖
原贴http://community.csdn.net/Expert/topic/5180/5180183.xml?temp=.8988611
函数功能是这样的:
将一个字符类型,记录的是日期,
比如 20061122090506121 表示 2006年11月22日 9点05分06秒121毫秒
现在就要把这个字符型的数据转换为日期:datetime型的数据
并且写成函数
叩谢!
冒牌货的答案
alter function fn_str2datetime (
@str varchar(30)
)
returns datetime
as
begin
if len(@str)<8 return null
if len(@str)=8 return left(@str,4)+'-'+substring(@str,5,2)+'-'+substring(@str,7,2)
if len(@str)<11 return left(@str,4)+'-'+substring(@str,5,2)+'-'+substring(@str,7,2)+' '+substring(@str,9,2)+':00:00'
if len(@str)<13 return left(@str,4)+'-'+substring(@str,5,2)+'-'+substring(@str,7,2)+' '+substring(@str,9,2)+':'+substring(@str,11,2)+':00'
return left(@str,4)+'-'+substring(@str,5,2)+'-'+substring(@str,7,2)+' '+substring(@str,9,2)+':'+substring(@str,11,2)+':'+substring(@str,13,2)
end
go
==================
这是我做的一个测试
declare @Str varchar(20)
set @Str = '20061120101020119'
select convert(datetime,
(
left(@str,4)+'-'+substring(@str,5,2)+'-'+substring(@str,7,2)+' '+substring(@str,9,2)+':'+substring(@str,11,2)+':'+substring(@str,13,2)+'.'+right(@str,3)
)
)
返回结果
2006-11-20 10:10:20.120
问题来了
sqlserver在转换时产生了1毫秒的误差
请问如何解决?