用于分拆字符串的表值函数--cross apply & outer apply
2010-06-18 15:32
309 查看
/*
功能:将短信分成普通短信
Author:庄项琨
select *
from dbo.uf_MultiMsg('【仁】即人与人之间的亲情善意,是儒家理论和传统道德的核心,其他具体的道德准则都由此衍生而来。仁的根本宗旨是爱人,即对人的亲近与善待。对于什么是“仁”,孔子曰“爱人”,孟子云“仁者爱人”。仁与爱是因果关系,仁是本质,爱是表现,正如朱熹所说“仁者,爱之理。”')
*/
ALTER function [dbo].[uf_MultiMsg](
@Msg varchar(max)
)
returns @tabel table ([PK_Total] [int] not null, [PK_Number] [int] NOT NULL, Msg varchar(max))
as
begin
declare @pknumber int
declare @pktotal int
declare @msgtemp varchar(500)
set @pktotal = ceiling(len(@Msg) / 67.0)
set @pknumber = 1
while @pktotal >= @pknumber
begin
set @msgtemp = substring(@Msg, (@pknumber - 1) * 67 + 1, 67)
insert into @tabel
select @pktotal, @pknumber, @msgtemp
set @pknumber = @pknumber + 1
end
return
end
select *
from a_test
cross apply dbo.uf_MultiMsg(msg)
--------------------------------------------------------------
create table #T(姓名 varchar(10))
insert into #T values('张三')
insert into #T values('李四')
create table #T2(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into #T2 values('张三' , '语文' , 74)
insert into #T2 values('张三' , '数学' , 83)
insert into #T2 values('张三' , '物理' , 93)
insert into #T2 values('李四' , '语文' , 90)
insert into #T2 values('李四' , '数学' , 66)
insert into #T2 values('李四' , '物理' , 88)
-- cross apply的经典用法;求每个人考试科目中成绩的前两名(取出每组中的前几名)
select * from #t t
cross apply
(select top 2 * from #t2 where 姓名=t.姓名 order by 分数 desc) as o
/*
姓名 姓名 课程 分数
---------- ---------- ---------- -----------
张三 张三 物理 93
张三 张三 数学 83
李四 李四 语文 90
李四 李四 物理 88
*/
create table #T(姓名 varchar(10))
insert into #T values('张三')
insert into #T values('李四')
insert into #T values(NULL )
create table #T2(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into #T2 values('张三' , '语文' , 74)
insert into #T2 values('张三' , '数学' , 83)
insert into #T2 values('张三' , '物理' , 93)
insert into #T2 values(NULL , '数学' , 50)
--drop table #t,#T2
go
select
*
from
#T a
cross apply
(select 课程,分数 from #t2 where 姓名=a.姓名) b
/*
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
(3 行受影响)
*/
select
*
from
#T a
outer apply
(select 课程,分数 from #t2 where 姓名=a.姓名) b
/*
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
李四 NULL NULL
NULL NULL NULL
(5 行受影响)
*/
功能:将短信分成普通短信
Author:庄项琨
select *
from dbo.uf_MultiMsg('【仁】即人与人之间的亲情善意,是儒家理论和传统道德的核心,其他具体的道德准则都由此衍生而来。仁的根本宗旨是爱人,即对人的亲近与善待。对于什么是“仁”,孔子曰“爱人”,孟子云“仁者爱人”。仁与爱是因果关系,仁是本质,爱是表现,正如朱熹所说“仁者,爱之理。”')
*/
ALTER function [dbo].[uf_MultiMsg](
@Msg varchar(max)
)
returns @tabel table ([PK_Total] [int] not null, [PK_Number] [int] NOT NULL, Msg varchar(max))
as
begin
declare @pknumber int
declare @pktotal int
declare @msgtemp varchar(500)
set @pktotal = ceiling(len(@Msg) / 67.0)
set @pknumber = 1
while @pktotal >= @pknumber
begin
set @msgtemp = substring(@Msg, (@pknumber - 1) * 67 + 1, 67)
insert into @tabel
select @pktotal, @pknumber, @msgtemp
set @pknumber = @pknumber + 1
end
return
end
select *
from a_test
cross apply dbo.uf_MultiMsg(msg)
--------------------------------------------------------------
create table #T(姓名 varchar(10))
insert into #T values('张三')
insert into #T values('李四')
create table #T2(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into #T2 values('张三' , '语文' , 74)
insert into #T2 values('张三' , '数学' , 83)
insert into #T2 values('张三' , '物理' , 93)
insert into #T2 values('李四' , '语文' , 90)
insert into #T2 values('李四' , '数学' , 66)
insert into #T2 values('李四' , '物理' , 88)
-- cross apply的经典用法;求每个人考试科目中成绩的前两名(取出每组中的前几名)
select * from #t t
cross apply
(select top 2 * from #t2 where 姓名=t.姓名 order by 分数 desc) as o
/*
姓名 姓名 课程 分数
---------- ---------- ---------- -----------
张三 张三 物理 93
张三 张三 数学 83
李四 李四 语文 90
李四 李四 物理 88
*/
create table #T(姓名 varchar(10))
insert into #T values('张三')
insert into #T values('李四')
insert into #T values(NULL )
create table #T2(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into #T2 values('张三' , '语文' , 74)
insert into #T2 values('张三' , '数学' , 83)
insert into #T2 values('张三' , '物理' , 93)
insert into #T2 values(NULL , '数学' , 50)
--drop table #t,#T2
go
select
*
from
#T a
cross apply
(select 课程,分数 from #t2 where 姓名=a.姓名) b
/*
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
(3 行受影响)
*/
select
*
from
#T a
outer apply
(select 课程,分数 from #t2 where 姓名=a.姓名) b
/*
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
李四 NULL NULL
NULL NULL NULL
(5 行受影响)
*/
相关文章推荐
- Cross Apply & Outer Apply
- cross apply & outer apply
- 填充指定字符串的每一节到指定长度,不够的在左恻用0补足,并将分隔符"-"去除,可用于排序的函数
- cross apply & outer apply
- cross apply & outer apply
- SQL Server 2005 中 Cross join & Cross Apply & Outer Apply 的区别
- SQL Server 2005 中 Cross join & Cross Apply & Outer Apply 的区别
- 函数strcat的变体用于连接任意多个字符串
- 各种字符串分拆处理函数.sql
- php函数之子字符串替换 str_replace
- 编写一个业务函数,实现字符串(前后各有三个空格,单词前后也均有空格) " i am student, you are teacher " , 各个单词首字符大写
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检测程序运行和函数调用次数计数
- 介绍几个程序中关于"路径字符串"的函数
- 编程序将一个字符串的前N个子字符送到一个字符型数组中去,然后再加上一个'\0'(不允许使用strcoy(str1,str2,n)函数)。
- 编写一个用于在字符串中查找某字符的函数。
- Python内置的字符串处理函数整理<转>
- 3.2 各种字符串分拆处理函数.sql
- 不用字符串库函数,实现求字符串的长度和翻转字符串······
- 【转载】cross apply & outer apply
- mssql2k经典的字符串分拆自定义函数