教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 数据库 > MSSQL教程 >

通过SQL语句生成由字母、日期、数字等组成编号

时间:2012-03-28 11:19来源:未知 作者:ken 点击:

本文和大家分享一下sql server,Oracle通用处理自动产生流水编号:字母、日期、数字等组成。挺不错。

做了最后一个项目是伟库网里的ERP-进销存网站。这个网站有一点就是每操作保存成功,都会产生一个单据编号。

而这个单据编号是由不同方式组成的,比如以下两个图:JH10120001,CD10120001。以下我来详细的讲解个人的理解与做法,

随笔中如若有错之处或者修要修改的,欢迎各位高手或浏览者指教,并希望你们提出宝贵的意见和建议。以下的内容希望对那些做ERP或者电子商务等等需要用到流水编号的同志们有所帮助.方法不是唯一的,知其中原理。

第一幅图的编号:JH10120001--进货首字母、日期是10年12月、4为编号组成的。

第二幅图的编号:CD10120001--采购订货中的采和订首字母、日期是10年12月、4为编号组成的

我们来看下sql server的做法,这里用到标量值函数,也可以用存储过程。

------------------------------------
--
--
/*

*作 者:lin sen
*功能说明:标量值函数(返回自动流水编号)
*编写日期:2010-12-23
*/
------------------------------------
DROP FUNCTION FUN_AutoLSH
GO
CREATE FUNCTION FUN_AuTOLSH()
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @LSHID VARCHAR(20) --返回流水编号
DECLARE @NUM INT

--查询该表最大的流水号
SELECT @NUM=ISNULL(MAX(CONVERT(INT,SUBSTRING(LSH,8,4))),0)+1
FROM YW_MESSAGE

--拼接下一个流水号:J+年份4位+月份2位+4位编号(如J2010120001)
SELECT @LSHID='J'+SUBSTRING(CONVERT(VARCHAR(100),GETDATE(),112),1,6)+SUBSTRING(CONVERT(CHAR(5),10000+@NUM),2,4)
FROM YW_MESSAGE

RETURN @LSHID
END

调用:select dbo.FUN_AutoLSH();

 有人会说哥们公司不用sql server,而是oracle。这个跟底下的通用一样的道理,只不过几个系统的函数不一样。以下是oracle标量值函数做法:

代码
create or replace function Fun_AutoLSH
return nvarchar2
AS
LSHID nvarchar2;
NUM
number;
begin
--查询该表最大的流水号
SELECT nvl(max(to_number(substr(LSH,6,4))),0) + 1 into NUM
From TEST.YW_MESSAGE;

--拼接下一个流水号:J+年份4位+月份2位+4位编号(如J2010120001)
SELECT 'J'||to_number(to_char(sysdate,'yyyymm'))||substr(to_char(10000+NUM),2,4) into LSHID
FROM TEST.YW_MESSAGE;
return(LSHID);
end Fun_AutoLSH;

调用:select Fun_AutoLSH() from dual;

(责任编辑:ken)

TAG标签: sql Oracle server 语句 生成
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容