这样的表结构怎样提取字段里的大写字母,高手过来看看!!!
表 c1结构如下:
aa bb cc dd
1000Wang Min 王敏
1010Deng He Ping 邓和平
1000Liu Yan 刘燕
1020Liang Zhu 梁竹
1030Yu Ke Zhen 喻克珍
1040Fang Jian Hua 房建华
1050Wang Yu Hui 王雨辉
1060Yang Sheng Zhen 杨胜珍
1040Hong Yu Wu 洪雨武
执行怎样的selct语句才能使结果集显示如下结构
aa bb cc dd
1000WM 王敏
1010DHP 邓和平
1000LY 刘燕
1020LZ 梁竹
1030YKZ 喻克珍
1040FJH 房建华
1050WYH 王雨辉
1060YSZ 杨胜珍
1040HW 洪雨武
[解决办法]
drop table c1
GO
create table c1(aa int,bb int,cc varchar(50),dd varchar(20))
insert into c1
select 100,0, 'Wang Min ', '王敏 '
union all select 101,0, 'Deng He Ping ', '邓和平 '
union all select 100,0, 'Liu Yan ', '刘燕 '
union all select 102,0, 'Liang Zhu ', '梁竹 '
union all select 103,0, 'Yu Ke Zhen ', '喻克珍 '
union all select 104,0, 'Fang Jian Hua ', '房建华 '
union all select 105,0, 'Wang Yu Hui ', '王雨辉 '
union all select 106,0, 'Yang Sheng Zhen ', '杨胜珍 '
union all select 104,0, 'Hong Yu Wu ', '洪雨武 '
GO
create function f_getpinyin(@cc varchar(50))
returns varchar(20)
as
begin
declare @pinyin varchar(20)
set @pinyin= ' '
while charindex( ' ',@cc)> 0
begin
select @pinyin=@pinyin+left(@cc,1)
select @cc=substring(@cc,charindex( ' ',@cc)+1,len(@cc))
end
return @pinyin
end
GO
select aa,bb,dbo.f_getpinyin(cc+ ' ') as cc,dd from c1
aa bb cc dd
----------- ----------- -------------------- --------------------
100 0 WM 王敏
101 0 DHP 邓和平
100 0 LY 刘燕
102 0 LZ 梁竹
103 0 YKZ 喻克珍
104 0 FJH 房建华
105 0 WYH 王雨辉
106 0 YSZ 杨胜珍
104 0 HYW 洪雨武
(所影响的行数为 9 行)
[解决办法]
gahade(与君共勉),是利用你的數據中有規律的空格來寫函數的,如果空格沒有那麼有規律,數據可能會有點誤差。
以下是查出字符串中的大寫字母的函數。
Create Table c1(aa Int,bb Int,cc Varchar(50),dd Nvarchar(20))
Insert Into c1
Select 100,0, 'Wang Min ',N '王敏 '
Union All Select 101,0, 'Deng He Ping ',N '邓和平 '
Union All Select 100,0, 'Liu Yan ',N '刘燕 '
Union All Select 102,0, 'Liang Zhu ',N '梁竹 '
Union All Select 103,0, 'Yu Ke Zhen ',N '喻克珍 '
Union All Select 104,0, 'Fang Jian Hua ',N '房建华 '
Union All Select 105,0, 'Wang Yu Hui ',N '王雨辉 '
Union All Select 106,0, 'Yang Sheng Zhen ',N '杨胜珍 '
Union All Select 104,0, 'Hong Yu Wu ',N '洪雨武 '
GO
Create Function F_GetUpper(@cc Varchar(50))
Returns Varchar(50)
Begin
Declare @S1 Varchar(50), @S2 Varchar(50), @I Int, @Len Int
Select @S1 = ' ', @S2 = ' ', @I = 1, @Len = Len(@cc)
While @I <= @Len
Begin
Select @S1 = Substring(@cc, @I, 1)
If(ASCII(@S1) Between 65 And 90)
Select @S2 = @S2 + @S1
Select @I = @I + 1
End
Return @S2
End
GO
Select
aa,
bb,
dbo.F_GetUpper(cc) As cc,
dd
From
c1
GO
Drop Table c1
Drop Function F_GetUpper
--Result
/*
aabbccdd
1000WM王敏
1010DHP邓和平
1000LY刘燕
1020LZ梁竹
1030YKZ喻克珍
1040FJH房建华
1050WYH王雨辉
1060YSZ杨胜珍
1040HYW洪雨武
*/
[解决办法]
declare @str varchar(100),@i int,@return varchar(100)
select @str = 'Wang Min ',@i=len(@str),@return = ' '
while @i > 0
begin
if substring(@str,@i,1) like '[A-Z] '
set @return = @return + substring(@str,@i,1)
set @i = @i - 1
end
print @return -- 'WM '