高手验证篇:现有一sql技术难题,请教高手!

dada1979 2003-10-30 03:38:52
在数据表中有一字段 记录如下:
100
10001
10002
101
10101
1010101
1010102
。。。
按照第一级3位其余各级2位 格式化成如下形势
100
100/01
100/02
101
101/01
101/01/01
101/01/02
。。。

请问 使用sql语句 如何实现?
(注:不使用程序 和 游标 逐条纪录循环判断。)
...全文
40 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-10-30
  • 打赏
  • 举报
回复
看你的编码是有规则的,用大力的就最简单了.
aierong 2003-10-30
  • 打赏
  • 举报
回复
create table #a(i varchar(1000))
insert into #a select '100'
insert into #a select '10001'
insert into #a select '10002'
insert into #a select '101'
insert into #a select '10101'
insert into #a select '1010101'
insert into #a select '1010102'
go
select * from #a
go
select * from #a where len(i)<=3
union all
select left(i,3)+'/'+right(i,2) from #a where len(i) between 4 and 5
union all
select left(i,3)+'/'+substring(i,6,2)+'/'+ right(i,2) from #a where len(i) between 6 and 7
order by i

txlicenhe 2003-10-30
  • 打赏
  • 举报
回复
Select dbo.test('1234'),dbo.test('12345'),dbo.test('123456'),dbo.test('1234567')
123/4 123/45 123/45/6 123/45/67

(所影响的行数为 1 行)

txlicenhe 2003-10-30
  • 打赏
  • 举报
回复
1:
Create function test(@a varchar(200))
RETURNS varchar(200)
as
begin
declare @b varchar(20),@i int
if len(@a) > 3
begin
set @b = left(@a,3)
set @a = right(@a,len(@a)-3)
while len(@a)>2
begin
set @b = @b + '/'+ left(@a,2)
set @a = right(@a,len(@a)-2)
end
if len(@a) > 0
set @b = @b + '/' + @a
end
else
set @b = @a
Return(@b)
end
2:
Select dbo.test(字段) from 表

pengdali 2003-10-30
  • 打赏
  • 举报
回复
一字段
------------------------------------------------------------------------------------------------------
100
100/01
100/02
101
101/01
101/01/01
101/01/02

(所影响的行数为 7 行)
pengdali 2003-10-30
  • 打赏
  • 举报
回复
create table #a(一字段 varchar(100))
insert #a values(100)
insert #a values(10001)
insert #a values(10002)
insert #a values(101)
insert #a values(10101)
insert #a values(1010101)
insert #a values(1010102)

SELECT case len(一字段) when 5 then STUFF(一字段,4,0, '/') when 7 then STUFF(STUFF(一字段,4,0, '/'),7,0, '/') else 一字段 end 一字段 from #a
go
drop table #a
pengdali 2003-10-30
  • 打赏
  • 举报
回复
SELECT case len(一字段) when 5 then STUFF(一字段,4,0, '/') when 7 then STUFF(STUFF(一字段,4,0, '/'),7,0, '/') else 一字段 end 一字段 from 表

34,874

社区成员

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

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