首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这样的表结构怎样提取字段里的大写字母,高手过来看看!解决思路

2012-03-07 
这样的表结构怎样提取字段里的大写字母,高手过来看看!!!表c1结构如下:aabbccdd1000WangMin王敏1010DengHeP

这样的表结构怎样提取字段里的大写字母,高手过来看看!!!
表   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 '

热点排行