如果要得到如CS_00000001,CS_00000002,CS_00000003的流水帐号
如下存储过程
Create PROCEDURE [dbo].[sp_Room_Code]
@CodeID varchar(11) output --// CS_00000001 流水帐号的长度,这里我用11位
AS
declare @num int --//定义一个
select @num = Max(cast(substring(Room_Code,3,4)as int)) from YourTable
--//得到 Room_Code 流水帐号字段后最大的一个,暂存@num
--这一句用到三个 SQL 函数 分别是 Max,cast,substring,它们的用法可以参考Server自带的帮助文档。
set @num = @num + 1 --//增加1
set @CodeID= 'cs_' + right('00000000'+cast(@num as varchar(8)),8)
--//这一句是生成流水帐号的关键
--//它的格式是 right(长度为流水帐号数字长度等长的填充字符串 + cast(@num as 流水帐号数字长度)),流水帐号长度)
--// 这里用到 right函数
GO
SQL Server联机丛书上函数的参考
MAX
返回表达式的最大值。
语法
MAX ( [ ALL | DISTINCT ] expression )
参数
ALL
对所有的值进行聚合函数运算。ALL 是默认设置。
DISTINCT
指定每个唯一值都被考虑。DISTINCT 对于 MAX 无意义,使用它仅仅是为了符合 SQL-92 兼容性。
expression
常量、列名、函数以及算术运算符、按位运算符和字符串运算符的任意组合。MAX 可用于数字列、字符列和 datetime 列,但不能用于 bit 列。不允许使用聚合函数和子查询。
返回类型
返回类型与 expression 相同。
重要 当使用 CUBE 或 ROLLUP 时,不支持区分聚合,例如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用,则 Microsoft® SQL Server™ 将返回错误信息并取消查询。
注释
MAX 忽略任何空值。
对于字符列,MAX 查找排序序列的最大值。
示例
下面的示例返回年度销售额最高的书。
USE pubs
GO
Select MAX(ytd_sales)
FROM titles
GO
下面是结果集:
-----------
22246
(1 row(s) affected)
Warning, null value eliminated from aggregate.
=======================================================
SUBSTRING
返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。
语法
SUBSTRING ( expression , start , length )
参数
expression
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。
start
是一个整数,指定子串的开始位置。
length
是一个整数,指定子串的长度(要返回的字符数或字节数)。
说明 由于在 text 数据上使用 SUBSTRING 时 start 和 length 指定字节数,因此 DBCS 数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与 READTEXT 处理 DBCS 的方式一致。然而,由于偶而会出现奇怪的结果,建议对 DBCS 字符使用 ntext 而非 text。
下例显示如何只返回字符串的一部分。该查询在一列中返回 authors 表中的姓氏,在另一列中返回 authors 表中的名字首字母。
USE pubs
Select au_lname, SUBSTRING(au_fname, 1, 1)
FROM authors
orDER BY au_lname
下面是结果集:
au_lname
---------------------------------------- -
Bennet A
Blotchet-Halls R
Carson C
DeFrance M
del Castillo I
...
Yokomoto A
(23 row(s) affected)
下例显示如何显示字符串常量 abcdef 中的第二个、第三个和第四个字符。
Select x = SUBSTRING('abcdef', 2, 3)
下面是结果集:
x
----------
bcd
(1 row(s) affected)
=======================================================
RIGHT
返回字符串中从右边开始指定个数的 integer_expression 字符。
语法
RIGHT ( character_expression , integer_expression )
参数
character_expression
由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。
integer_expression
是起始位置,用正整数表示。如果 integer_expression 是负数,则返回一个错误。
返回类型
varchar
character_expression 必须为可隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression。
注释
兼容级别可能影响返回值。有关更多信息,请参见 sp_dbcmptlevel。
示例
下例返回每个作者名字中最右边的五个字符。
USE pubs
GO
Select RIGHT(au_fname, 5)
FROM authors
orDER BY au_fname
GO
下面是结果集:
------------------
raham
Akiko
lbert
Ann
Anne
Burt
rlene
heryl
Dean
Dirk
ather
Innes
hnson
Livia
jorie
ander
chael
ichel
gstar
inald
heryl
earns
ylvia
(23 row(s) affected)
mysql 表流水号生成优化 sql自动生成流水号0001
转载文章标签 mysql 表流水号生成优化 存储 sql character sql server 文章分类 MySQL 数据库
-
交易流水号的艺术:掌握支付系统的业务ID生成指南
讲清楚支付系统中为什么要有业务ID,各子域的业务ID为什么要统一规范,以及最佳实践。
序列号 最佳实践 支付系统设计与实现 业务ID 分布式