永发信息网

SQL 每月的3流水号,超过999用ABC表示

答案:2  悬赏:40  手机版
解决时间 2021-04-06 16:48
SQL 每月的3流水号,超过999用ABC表示
最佳答案
何必要如此呢,扩大位数岂不更好?
下面是你需要的代码主体,具体参数定义看注释。
---定义当前的流水号,可以从数据库中获取,此处为测试值
DECLARE @CURR_LSH VARCHAr(7)
---新流水号
DECLARE @LSH VARCHAr(7)
---旧流水号第5位
DECLARE @FIRSTCHAR VARCHAr(1)
---旧流水号最后2位的数值
DECLARE @LASTCHAR2 INT
---旧流水号第5位的asc码
DECLARE @FIRSTCHARASCII INT
---新的后3位流水号
DECLARE @LASTCHAR3NEW VARCHAr(3)
---测试的旧流水号
SET @CURR_LSH = 'B307Z98'
---定义当前年份最后1位和两位的月份
DECLARE @YEAR VARCHAr(1)
DECLARE @MONTH VARCHAr(2)
SET @YEAR = SUBSTRINg(CONVERT(VARCHAR,DATEPART(YEAR,GETDATE())),4,1)
SET @MONTH = RIGHt('0' + CONVERT(VARCHAR,DATEPART(MONTH,GETDATE())), 2)

SET @FIRSTCHAR = SUBSTRINg(@CURR_LSH, 5,1)
SET @FIRSTCHARASCII = ASCIi(@FIRSTCHAR)
---@FIRSTCHARASCII 48-57表示0-9,65-90表示A-Z
SET @LASTCHAR2 = CONVERT(INT,SUBSTRINg(@CURR_LSH,6,2))
IF @LASTCHAR2 <99
BEGIN
SET @LASTCHAR3NEW = @FIRSTCHAR + RIGHt('00' + CONVERT(VARCHAR, @LASTCHAR2 + 1),2)
END
ELSE
BEGIN
IF @FIRSTCHARASCII < 57
SET @LASTCHAR3NEW = CONVERT(VARCHAR, CONVERT(INT,@FIRSTCHAR + '00') + CONVERT(INT, RIGHt('00' + CONVERT(VARCHAR, @LASTCHAR2 + 1),3)))
ELSE IF @FIRSTCHARASCII = 57
SET @LASTCHAR3NEW = 'A00'
ELSE
SET @LASTCHAR3NEW = CHAr(@FIRSTCHARASCII + 1) + '00'
END
---输出你需要的新流水号
SET @LSH = 'B' + @YEAR + @MONTH + @LASTCHAR3NEW
---打印出来
PRINT @LSH追问可能是我没有说清楚,是超过999用A00-A99,超过A99用B00-B99,以此类推…可能是我没有说清楚,是超过999用A00-A99,超过A99用B00-B99,以此类推…可能是我没有说清楚,是超过999用A00-A99,超过A99用B00-B99,以此类推…可能是我没有说清楚,是超过999用A00-A99,超过A99用B00-B99,以此类推…追答是这样的,你验证一下就明白了。
全部回答
参考了第一位兄弟的答案
DECLARE @Key INT
DECLARE @ASCII INT
DECLARE @PreKey VARCHAr(32)
DECLARE @SerialNo VARCHAr(32)
--取已经存在的最大值(需要自行修改一下)
IF NOT EXISTS (SELECt SerialNo FROM table)
SET @SerialNo = 'B000000'
ELSE
SELECt @SerialNo = SerialNo FROM tbale
--计算新的前缀
SET @PreKey = LEFt(@SerialNo, 1)
SELECT @prekey = @prekey
+ CAST(RIGHt(DATEPART(year, GETDATE()), 1) * 100
+ DATEPART(MONTH, GETDATE()) AS VARCHAr(32))
--计算流水号部分
SET @key = RIGHt(@SerialNo, 2)
IF @Key = 99
BEGIN
SET @ASCII = ASCIi(LEFt(RIGHt(@SerialNo, 3), 1)) + 1
SET @key = 0
END
ELSE
BEGIN
SET @ASCII = ASCIi(LEFt(RIGHt(@SerialNo, 3), 1))
SET @key = @key + 1
END
IF @ASCII = 58
SET @ASCII = 65
IF @ASCII > 90
GOTO Err
--输出最终的编号
SELECT @PreKey + CHAr(@ASCII) + RIGHt('00' + CAST(@key AS VARCHAR), 2)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
爱孩子名言名句十个字,关于"读书好处多"的名
布里斯托大学 film and television studies专
英雄中路锦江之星的wifi密码
Dell inspiron Z13-N311Z XP声卡装好后不能语
—How was the food?—It was ______ good.A.
我捡了一条金项链,可我没有还,我很无耻吗?
手机如何连接校园网,手机怎么连上天翼校园网
男生大学毕业摆夜摊日入千元,这样的男生能嫁
61岁老人一直咳怎么办
有一首歌,女的,歌词有一段一直重复的发音是
泰兴到盐城详细情况
木字旁,上面一个尸,下面一个九再下面一个“牛
I’ll tell him about itI see him.A. as soo
交警抄牌打错车牌号码怎么办
6周岁内是指哪段时间?6岁1个月至12个月吗?
推荐资讯
南昌大学共青学院艺术设计怎么样?女生住宿条
月岛雯的经典语录
单位物质的量与一摩尔的区别
下列说法正确的是A.所有的等腰梯形都相似B.所
山下智久和山田凉介关系怎么突然变得这么好了
正版stayreal21度衬衫上面写的是中国制造made
趁我们还年轻下一句,爸爸感叹到:“年轻真好
关于口袋妖怪中的专有名词
后八轮工程车什么牌子的最好
利用级数方法证明:∫(1,0)( x+ln(1-x))/x^2dx
择日怎样利用三合
为什么我家wifi打开网页和在线看电影都不卡
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?