一个SQL小问题。

kkkkkkmn 2010-04-20 01:23:47
我的数据库中有
0000-0000-0000-1026262
0000-0000-0000-1026263
0000-0000-0000-1026264
0000-0000-0000-1026265
0000-0000-0000-1026266
0000-0000-0000-1026267
0000-0000-0000-1026268
0000-0000-0000-1026269
0000-0000-0000-1026270
0000-0000-0000-1026271
0000-0000-0000-1026274
0000-0000-0000-1026275
0000-0000-0000-1026276
0000-0000-0000-1026277
0000-0000-0000-1026278
0000-0000-0000-1026279
0000-0000-0000-1026280
0000-0000-0000-1026281这样的数据
还有临时的
TMP1111-1111-1111-1111115
TMP1111-1111-1111-1111116
TMP1111-1111-1111-1111117假如我现在有一个临时的
TMP1111-1111-1111-1111117我想得到

TMP1111-1111-1111-1111114
怎么得到
存储过程怎么写啊!
我是小菜
我明白是先去掉TMP和- 转成数字减一
但是怎么查到TMP1111-1111-1111-1111115啊
谁能帮帮我!!!
已有结果马上结贴
...全文
133 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuxiuhua 2010-04-20
  • 打赏
  • 举报
回复
帮顶下
JOCLI 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kkkkkkmn 的回复:]
引用 4 楼 jocli 的回复:
set @result='TMP'+@result+substring(@temp,16,7)
这里改一下==>

SQL code

declare @temp varchar(30),@num bigint,@result varchar(50)
select @temp=replace('TMP1111-1111-1111-1111115',……
[/Quote]



declare @tempTable table(value varchar(30),number bigint)
insert into @tempTable values('TMP1111-1111-1111-1111115',null)
insert into @tempTable values('TMP1111-1111-1111-1111116',null)
insert into @tempTable values('TMP1111-1111-1111-1111117',null)
update @tempTable
set number=replace(replace(value,'TMP',''),'-','')
select top 1 number from @tempTable order by number
liuyileneal 2010-04-20
  • 打赏
  • 举报
回复
不好意思,还是第一个对。。。
liuyileneal 2010-04-20
  • 打赏
  • 举报
回复

declare @num bigint,@result varchar(30)
select @num = select min(Convert(bigint,replace(replace(列,'-',''),'TMP',''))) from 表;
set @num=@num-1
set @temp=convert(varchar(30),@num)
set @result=substring(@temp,1,4)+'-'
set @result=@result+substring(@temp,6,4)+'-'
set @result=@result+substring(@temp,11,4)+'-'
set @result='TMP'+@result+substring(@temp,16,7)
select @result


上边的少了一个select
liuyileneal 2010-04-20
  • 打赏
  • 举报
回复


declare @num bigint,@result varchar(30)
select @num = min(Convert(bigint,replace(replace(列,'-',''),'TMP',''))) from 表;
set @num=@num-1
set @temp=convert(varchar(30),@num)
set @result=substring(@temp,1,4)+'-'
set @result=@result+substring(@temp,6,4)+'-'
set @result=@result+substring(@temp,11,4)+'-'
set @result='TMP'+@result+substring(@temp,16,7)
select @result


这样就ok了吧
JOCLI 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kkkkkkmn 的回复:]
引用 4 楼 jocli 的回复:
set @result='TMP'+@result+substring(@temp,16,7)
这里改一下==>

SQL code

declare @temp varchar(30),@num bigint,@result varchar(50)
select @temp=replace('TMP1111-1111-1111-1111115',……
[/Quote]

创建一个临时表变量,用相同的方法取出其数值部分,再将数值与之对应的原值放入该表,然后进行 select top 1 order by 数值即可
liuyileneal 2010-04-20
  • 打赏
  • 举报
回复

create table Card
(
cardno varchar(30)
)
insert into Card values('TMP1111-1111-1111-1111114')
insert into Card values('TMP1111-1111-1111-1111115')
insert into Card values('TMP1111-1111-1111-1111116')
select min(Convert(bigint,replace(replace(cardno,'-',''),'TMP',''))) from card


1111111111111111114
liuyileneal 2010-04-20
  • 打赏
  • 举报
回复
select min(Convert(bingint,replace(replace(该列,'-',''),'TMP',''))) from table
kkkkkkmn 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jocli 的回复:]
set @result='TMP'+@result+substring(@temp,16,7)
这里改一下==>

SQL code

declare @temp varchar(30),@num bigint,@result varchar(50)
select @temp=replace('TMP1111-1111-1111-1111115','-','')
select @te……
[/Quote]
谢谢你还有一个问题你忽略了
就是在数据库中怎么找到这个最小的'TMP1111-1111-1111-1111115'
huminghua 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jocli 的回复:]

set @result='TMP'+@result+substring(@temp,16,7)
这里改一下==>
SQL code

declare @temp varchar(30),@num bigint,@result varchar(50)
select @temp=replace('TMP1111-1111-1111-1111115','-','')
select @temp=r……
[/Quote]。。。。对啊!学习
sxiaohui8709253 2010-04-20
  • 打赏
  • 举报
回复
我日 是减1
select
left('TMP1111-1111-1111-1111117',18)+
replace(right('TMP1111-1111-1111-1111117',7),
right('TMP1111-1111-1111-1111117',7),convert(varchar,(cast right('TMP1111-1111-1111-1111117',7) as bigint)-1)

sxiaohui8709253 2010-04-20
  • 打赏
  • 举报
回复

select
left('TMP1111-1111-1111-1111117',18)+
replace(right('TMP1111-1111-1111-1111117',7),
right('TMP1111-1111-1111-1111117',7),convert(varchar,(cast right('TMP1111-1111-1111-1111117',7) as bigint)+1)
itliyi 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jocli 的回复:]
set @result='TMP'+@result+substring(@temp,16,7)
这里改一下==>

SQL code

declare @temp varchar(30),@num bigint,@result varchar(50)
select @temp=replace('TMP1111-1111-1111-1111115','-','')
select @te……
[/Quote]
whowhen21 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jocli 的回复:]
set @result='TMP'+@result+substring(@temp,16,7)
这里改一下==>

SQL code

declare @temp varchar(30),@num bigint,@result varchar(50)
select @temp=replace('TMP1111-1111-1111-1111115','-','')
select @te……
[/Quote]
楼上SQL强人~
JOCLI 2010-04-20
  • 打赏
  • 举报
回复
set @result='TMP'+@result+substring(@temp,16,7)
这里改一下==>

declare @temp varchar(30),@num bigint,@result varchar(50)
select @temp=replace('TMP1111-1111-1111-1111115','-','')
select @temp=replace(@temp,'TMP','')
select @num=convert(bigint,@temp)
set @num=@num-1
set @temp=convert(varchar(30),@num)
select @temp
set @result=substring(@temp,1,4)+'-'
set @result=@result+substring(@temp,6,4)+'-'
set @result=@result+substring(@temp,11,4)+'-'
set @result='TMP'+@result+substring(@temp,13,7)
select @result


JOCLI 2010-04-20
  • 打赏
  • 举报
回复

declare @temp varchar(30),@num bigint,@result varchar(30)
select @temp=replace('TMP1111-1111-1111-1111115','-','')
select @temp=replace(@temp,'TMP','')
select @num=convert(bigint,@temp)
set @num=@num-1
set @temp=convert(varchar(30),@num)
set @result=substring(@temp,1,4)+'-'
set @result=@result+substring(@temp,6,4)+'-'
set @result=@result+substring(@temp,11,4)+'-'
set @result='TMP'+@result+substring(@temp,16,7)
select @result
liuyileneal 2010-04-20
  • 打赏
  • 举报
回复
你没有描述清楚,TMP1111-1111-1111-1111114转换成数字能放得下么?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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