• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

今天下午面试的一道关于存储过程的上机题,高手答.....

shanwell 2008-02-25 10:09:15
这是其中一题,头晕晕的,没整出来,高手来试试.....

分不多,15分吧。只给一人,确认无误后再帖上来。请认真看清题目:

题目: 写一存储过程。有一外参类型为Varchar(4000),要求以每行为40个字符为一行

的格式输出此参数。同一字的字符不能拆分。

1、该参可以不考虑为中文字符。

2、不考虑单个字的字符数大于40的情况。

举例:@input='You have to finish all what need to do today' 以10个字符为一行输出,测为:

'You have'
'to finish'
'all what'
'need to do'
'today'

大概就是这个意思。请高手过招.....

...全文
120 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
c+go 2010-09-10
这是面试宝典上的一道题,在面试宝典第二版的264页(C/C++).
回复
iamme81 2008-05-13
[Quote=引用 7 楼 fcuandy 的回复:]
代码看起来难看了一点,但效率应该好一些.


SQL codeDECLARE @s VARCHAR(4000)
SELECT @s='aaa bbb ccccccc ddd eee fff ggggggg hh ii kk jjjjjjjj z sddddd efffff'


WHILE CHARINDEX(' ',@s)>0
BEGIN
IF SUBSTRING(@s,10,1)!='' AND SUBSTRING(@s,11,1)!=''
BEGIN
PRINT LEFT(@s,10-CHARINDEX(' ',REVERSE(LEFT(@s,10))))
SET @s=STUFF(@s,1,11-CHARI…
[/Quote]
这个方法解决了超过N个长度字符的问题但是若遇到汉字该怎么办,比如遇到
'我很伟大 挖老大案要案 的的撒播来宾 而后 究其根源 是不是 乃脑袋被灌水了不得 来 来宾sda lai 来'
上述代码将无限循环
回复
shanwell 2008-02-25
只有一点分,要不然会加些分的。
回复
fcuandy 2008-02-25
代码看起来难看了一点,但效率应该好一些.

DECLARE @s VARCHAR(4000)
SELECT @s='aaa bbb ccccccc ddd eee fff ggggggg hh ii kk jjjjjjjj z sddddd efffff'


WHILE CHARINDEX(' ',@s)>0
BEGIN
IF SUBSTRING(@s,10,1)!='' AND SUBSTRING(@s,11,1)!=''
BEGIN
PRINT LEFT(@s,10-CHARINDEX(' ',REVERSE(LEFT(@s,10))))
SET @s=STUFF(@s,1,11-CHARINDEX(' ',REVERSE(LEFT(@s,10))),'')
END
ELSE
BEGIN
PRINT LEFT(@s,10)
SET @s=LTRIM(RIGHT(@s,LEN(@s)-10))
END
END
PRINT @s
/*
aaa bbb
ccccccc
ddd eee
fff
ggggggg hh
ii kk
jjjjjjjj z
sddddd
*/
回复
中国风 2008-02-25
declare @input varchar(4000),@s varchar(20),@i int
select @input='You have to finish all what need to do today'

while @input>''
begin
set @i=10
while substring(@input,@i+1,1)>''
select @i=@i+1

set @s=left(@input,@i)
print @s
select @input=stuff(@input,1,@i,'')
end
回复
中国风 2008-02-25
declare @input varchar(4000),@s varchar(20),@i int
select @input='You have to finish all what need to do today'

while @input>''
begin
set @i=10
while substring(@input,@i,1)>''
select @i=@i+1, @s=left(@input,@i)
print @s
select @input=stuff(@input,1,@i,'')
end

/*
You have
to finish
all what
need to
do today
*/
回复
Limpire 2008-02-25
declare @input nvarchar(4000)
set @input='You have to finish all what need to do today'

declare @c int

while len(@input) > 10
begin
set @c = charindex(' ', @input)
while 1 = 1
begin
if charindex(' ', @input, @c + 1) > 11 or charindex(' ', @input, @c + 1) = 0 break
set @c = charindex(' ', @input, @c + 1)
end
print left(@input, @c - 1)
set @input = right(@input, len(@input) - @c)
end
if @input <> '' print @input
回复
中国风 2008-02-25
看错。。看到这个了 以10个字符为一行输出
回复
中国风 2008-02-25
方法多
declare @input varchar(4000)
select @input='You have to finish all what need to do today'

while @input>''
begin
print left(@input,10)
select @input=stuff(@input,1,10,'')
end
回复
liangCK 2008-02-25
给我?
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-25 10:09
社区公告
暂无公告