数据库自定义方法及在Sql语句中调用

由于 在我使用的数据表中 lasttime字段 在写入数据表时写入字符串‘20120401145112827’类型 在业务中需要对其字段时间做处理 以下过程是使用数据库自定义方法 简化Sql语句

--Sql中自定义方法
create function StrToDateTime(@DateStr as varchar(18))
returns varchar(24) --注意 returns 不是 return
as
begin
declare @date varchar(24);
set @date=@DateStr;
set @date=(SUBSTRING(cast (@date as varchar(18)),1,4)+'-'+SUBSTRING(cast (@date as varchar(18)),5,2) +'-'+SUBSTRING(cast (@date as varchar(18)),7,2)
+' '+SUBSTRING(cast (@date as varchar(18)),9,2)
+':'+SUBSTRING(cast (@date as varchar(18)),11,2)
+':'+SUBSTRING(cast (@date as varchar(18)),13,2));
return @date;
end

以下为执行方法 打印结果为 2012-04-01 14:51:12

declare @returntime varchar(24)
exec @returntime=StrToDateTime '20120401145112827'
print convert(varchar(24),convert(datetime,@returntime),20)


以下代码为初始的Sql语句 未使用自定义方法

select * from (
select id,interID,cpid,intername,reply,lasttime,CASE lasttime
WHEN '0' THEN getdate()-3
Else cast((SUBSTRING(cast (lasttime as varchar(18)),1,4)
+'-'+SUBSTRING(cast (lasttime as varchar(18)),5,2)
+'-'+SUBSTRING(cast (lasttime as varchar(18)),7,2)
+' '+SUBSTRING(cast (lasttime as varchar(18)),9,2)
+':'+SUBSTRING(cast (lasttime as varchar(18)),11,2)
+':'+SUBSTRING(cast (lasttime as varchar(18)),13,2)
) as varchar(24))
end as ldate,setTime from xsreuserinter
) as temp
where (datediff(hh,temp.ldate,getdate())>72 and datediff(hh,temp.setTime,getdate())>72) order by lasttime desc

o(∩_∩)o 哈哈 以下为调用该方法之后的Sql语句
--Notice: 调用该方法时 一定要加前缀dbo. 否则 报错“该内置方法不识别” 该方法在哪个数据库下执行 只属于哪个数据库 跨数据库无效
--调用方法为 select dbo.StrToDateTime(lasttime)

select * from (
select id,interID,cpid,intername,reply,lasttime,CASE lasttime
WHEN '0' THEN getdate()-3
Else convert(datetime,dbo.StrToDateTime(lasttime),20) --该处调用function
end as ldate,setTime from xsreuserinter
) as temp
where (datediff(hh,temp.ldate,getdate())>72 and datediff(hh,temp.setTime,getdate())>72) order by lasttime desc


在此区别一下 function 和 procedure
procedure为独立存储过程,使用EXEC命令,而自定义函数可以在一个SQL语句内调用,也可使用exec命令调用。

数据库自定义方法可以简化sql语句 并且可以多次重复利用 :-) 以前都没用过 开心 顶一个!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值