数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQLServer中的Scanf与Printf


发布日期:2019年03月11日
 
SQLServer中的Scanf与Printf

SQLServer中有两个扩展存储过程实现Scanf和Printf功能恰当的使用它们可以在提取和拼接字符串时大幅度简化SQL代码

xp_sscanf用它可以分解格式相对固定的字符串这对于厌倦使用一堆substring和charindex的朋友来说不错比如前几天的一个帖子中提出的如何分解ip地址相对简练且通用的代码应该是下面这样

复制代码 代码如下:
if (object_id (f_getip ) is not null )
drop function f_getip
go
create function dbo f_getip (@ ip varchar ( ))
returns @ t table (a int b int c int d int )
as
begin
set @ ip = replace (@ ip )
declare
@ s varchar ( ) @ s varchar ( )
@ s varchar ( ) @ s varchar ( )
exec xp_sscanf @ ip %s %s %s %s @ s output @ s output @ s output @ s output
insert into @ t select @ s @ s @ s @ s
return
end
go
select * from dbo f_getip ( )
go
/*
a b c d


*/


xp_sprintf用它可以拼接出一个字符串而不用担心过多的加号很引号难以控制比如一个动态执行sql语句的存储过程

复制代码 代码如下:
if (object_id (p_select ) is not null )
drop proc p_select
go
create proc p_select (@ tb varchar ( ) @ cols varchar ( ) @ wherecol varchar ( ) @ value varchar ( ))
as
begin
declare @ s varchar ( )
exec xp_sprintf @ s output select %s from %s where %s=%s @ cols @ tb @ wherecol @ value
exec (@ s)
end
go
exec p_select sysobjects idxtypecrdate name p_select
/*
id xtype crdate

P ::
*/

上一篇:用sql存储过程实现前台标题变色

下一篇:SQL2005CLR函数扩展-深入环比计算的详解