sql语句取得格式化的最大编号,怎么写
sql语句取得格式化的最大编号,如何写?
sql语句取得格式化的最大编号,如何写?
例如
数据库中最大编号0501 则生成0502
数据库中最大编号9999 则生成10000
select right('0000000000000000000000' + cast(max(bh)+1 as varchar),len(max(bh))) as maxbh from spxx
这个语句有一个问题
当max(bh)=9999的时候, 取得的结果就变成0000了
现在就是要解决这个问题
如果这样写
select right('0000000000000000000000' + cast(max(bh)+1 as varchar),len(cast((max(bh)+1) as varchar))) as maxbh from spxx
虽然解决了9999的问题,但如果max(bh)=0501时,结果又生成了502
------解决方案--------------------
------解决方案--------------------
sql语句取得格式化的最大编号,如何写?
例如
数据库中最大编号0501 则生成0502
数据库中最大编号9999 则生成10000
select right('0000000000000000000000' + cast(max(bh)+1 as varchar),len(max(bh))) as maxbh from spxx
这个语句有一个问题
当max(bh)=9999的时候, 取得的结果就变成0000了
现在就是要解决这个问题
如果这样写
select right('0000000000000000000000' + cast(max(bh)+1 as varchar),len(cast((max(bh)+1) as varchar))) as maxbh from spxx
虽然解决了9999的问题,但如果max(bh)=0501时,结果又生成了502
------解决方案--------------------
------解决方案--------------------
- SQL code
go create table #spxx( bh int ) insert #spxx select 9999 select case when max(bh)=9999 then right('0000000000000000000000' + ltrim(max(bh)+1),len(ltrim(max(bh)))+1) else right('0000000000000000000000' + ltrim(max(bh)+1),len(ltrim(max(bh)))) end as maxbh from #spxx /* maxbh 10000 */
------解决方案--------------------
写了个例子,自动根据最大的编号进行判断和调整,仅供参考:
create table t1
(
id varchar(10)
)
insert into t1
select '99999'
select * from t1
select MAX(CAST(id as int)) from t1
select case when len(MAX(CAST(id as int))+1)>len(MAX(CAST(id as int)))
then RIGHT('0000000000'+LTRIM(MAX(CAST(id as int))+1),len(MAX(CAST(id as int))+1))
else RIGHT('0000000000'+LTRIM(MAX(CAST(id as int))+1),LEN(max(cast(id as int))))
end
from t1
------解决方案--------------------
另外说一句,楼主你这种编号,每次都要转换数据类型,实在是麻烦的很。
------解决方案--------------------
楼主这样子很难确定吧!最好是指定长度,对于流水号而言,给个设置的规律。
例如字符串总共十五位,前五位是各公司设置的字母前缀,后十位是序号。这样截取应该容易点。