如果要得到如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)