一个简单的关于数据库的截取和插入的问题

--小F-- 2009-03-12 10:08:03
小弟现在有一个数据库叫做GADJ,其中有一个表叫做GENERALDATA,里面有个字段叫做宗地号。现在宗地号里面的数据是7位的,我要把它变为13位,比如我有一个宗地号为0036055,现在要变为的是0000360000055,意思就是截取前2位,补足0为3位,然后再截取2位,补足0为3位,剩下的3位在前面补足0为7位,这样就一共成为13位,我写的一个代码如下,但执行以后无效果。希望大家能帮我的忙,谢谢
USE GADJ DECLARE @var varchar(32) DECLARE mycur CURSOR FOR SELECT 宗地号
FROM GENERALDATA
FOR UPDATE OF 宗地号
OPEN mycur FETCH
next
FROM mycur
INTO @var WHILE @@fetch_status = 0 BEGIN IF len(@var) = 7 BEGIN
UPDATE GENERALDATA
SET 宗地号 = RIGHT('000' + LEFT(@var, 2), 3) + RIGHT('000' + RIGHT(LEFT(@var,
4), 2), 3) + RIGHT('0000000' + RIGHT(@var, 3), 7)
WHERE CURRENT OF mycur END FETCH next
FROM mycur
INTO @var END CLOSE mycur DEALLOCATE mycur
...全文
90 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fredrickhu 的回复:]
对不起各位。我说错了,应该变为0030060055000.意思就是截取前3位,补足3位补足0到3位,然后截取一位,补足0到3位,最后3位先在前面补足0到4位,然后再加3个0到7位,是修改为13位,希望大家帮我。select肯定是没用的,谢谢
[/Quote]

declare @d varchar(30)
set @d='0036055'

select left(@d,3) --截取前3位,补足3位补足0到3位
+right('000'+substring(@d,4,1),3) --然后截取一位,补足0到3位
+right('0000'+right(@d,3),4) --最后3位先在前面补足0到4位
+'000' --然后再加3个0到7位


/**


----------------------
0030060055000

(所影响的行数为 1 行)
**/
--小F-- 2009-03-12
  • 打赏
  • 举报
回复
use GADJ

update GENERALDATA
set 宗地号 = substring(宗地号,1,3) + '00' + substring(宗地号,4,1) + '0' + substring(宗地号,5,3)+'000'
搞定结贴,谢谢大家,各位兄弟都是好样的
百年树人 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 fredrickhu 的帖子:]
小弟现在有一个数据库叫做GADJ,其中有一个表叫做GENERALDATA,里面有个字段叫做宗地号。现在宗地号里面的数据是7位的,我要把它变为13位,比如我有一个宗地号为0036055,现在要变为的是0000360000055,意思就是截取前2位,补足0为3位,然后再截取2位,补足0为3位,剩下的3位在前面补足0为7位,这样就一共成为13位,我写的一个代码如下,但执行以后无效果。希望大家能帮我的忙,谢谢
USE GADJ DECLARE @var varchar(32) DECLAR…
[/Quote]

不能直接去取后面的两位,否则如果有1236155这样的数据取出来是不对的。
直接把前4位变为6位(不够6位前面补0),后三位变为7位(不够7位前面补0),即可。
--小F-- 2009-03-12
  • 打赏
  • 举报
回复
对不起各位。我说错了,应该变为0030060055000.意思就是截取前3位,补足3位补足0到3位,然后截取一位,补足0到3位,最后3位先在前面补足0到4位,然后再加3个0到7位,是修改为13位,希望大家帮我。select肯定是没用的,谢谢
肥龙上天 2009-03-12
  • 打赏
  • 举报
回复

create table #1 (dd nvarchar(25))
insert #1 values('0036055')
insert #1 values('1136346')
go
select dd
,dd2 = '0'+left(dd,2)+'0'+substring(dd,3,2)+'0000'+substring(dd,5,3)
from #1
/*
dd dd2
------------------------- -------------
0036055 0000360000055
1136346 0110360000346

(2 row(s) affected)

*/
ChinaJiaBing 2009-03-12
  • 打赏
  • 举报
回复

declare @generaldata table (宗地号 nvarchar(20))
insert into @generaldata select '0036055'
update @generaldata set 宗地号= LEFT (宗地号,2)+'00'+ substring(宗地号,3,2)+'0000'+RIGHT(宗地号,3)
select * from @generaldata

宗地号
--------------------
0000360000055

(1 行受影响)

百年树人 2009-03-12
  • 打赏
  • 举报
回复
declare @d varchar(30)
set @d='0036055'

select right('000000'+left(@d,4),6)+right('0000000'+right(@d,3),7)

/**


-------------------------
0000360000055

(所影响的行数为 1 行)
**/
Zoezs 2009-03-12
  • 打赏
  • 举报
回复

select '0'+substring('0036055',1,2)+'0'+substring('0036055',3,2)+'0000'+substring('0036055',5,3)


-------------
0000360000055

(1 行受影响)
sdhdy 2009-03-12
  • 打赏
  • 举报
回复
select left('00'+'0036055',6)+'00000'+right('0036055',2)

/*
0000360000055
*/
dawugui 2009-03-12
  • 打赏
  • 举报
回复
use GADJ
go

update GENERALDATA
set 宗地号 = substring(宗地号,1,2) + '00' + substring(宗地号,3,2) + '0000' + substring(宗地号,5,3)
dawugui 2009-03-12
  • 打赏
  • 举报
回复
select substring('0036055',1,2) + '00' + substring('0036055',3,2) + '0000' + substring('0036055',5,3)

/*

--------------------
0000360000055

(所影响的行数为 1 行)

*/

34,590

社区成员

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

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