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

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'

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

...全文
152 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
给我?

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧