数据库 表中主键字符串通过函数取值
来源:互联网 发布:手机淘宝 无响应 编辑:程序博客网 时间:2024/06/05 04:56
如果项目中有特殊要求,表的主键id用varchar类型,那么自增方式只能通过函数来解决。思路就是在函数中定义开始值和最大值,如果通过参数在某表中查无数据就赋值1,有数据就加一,另给该id做了类似加密
首先需要定义表来存放参数 ,记录当前数据 tbl_base_seq
其次定义函数fun_create_id
BEGIN DECLARE cRES_ID varchar(32);#返回值 DECLARE RES_ID INT(32) UNSIGNED;#递增值 DECLARE prefix varchar(30); DECLARE vextract varchar(30); DECLARE temp_start INT(32) UNSIGNED;#初始值 DECLARE temp_end INT(32) UNSIGNED;#最大值 DECLARE len INT(3) UNSIGNED;#最大值长度 #查询当前属性,IN_SEQ_NAME是参数 SELECT MAX(s.seq_current),MAX(s.seq_prefix),MAX(seq_extract),MAX(seq_start),MAX(seq_end) INTO RES_ID,prefix,vextract,temp_start,temp_end FROM TBL_BASE_SEQ s WHERE s.seq_name = IN_SEQ_NAME; # 查询参数不在表则把该参数插入表 IF RES_ID IS NULL or RES_ID = '' THEN INSERT INTO tbl_base_seq(seq_name,seq_current,seq_start) VALUES(IN_SEQ_NAME,1,1); SET RES_ID = 1; END IF; IF temp_end IS NULL or temp_end = '' THEN set temp_end = 99999999; END IF; IF prefix IS NULL OR prefix ='' THEN set prefix = 'yymmddhh24miss'; END IF; set len = LENGTH(temp_end);#有最大值 IF RES_ID<temp_end THEN UPDATE tbl_base_seq SET seq_current = seq_current+1 WHERE seq_name = IN_SEQ_NAME; ELSE UPDATE tbl_base_seq SET seq_current = 1 WHERE seq_name = IN_SEQ_NAME; END IF; # 增加前缀 IF prefix IS NOT NULL and prefix != '' THEN # SELECT CONCAT(TO_CHAR(SYSDATE, prefix),RES_ID) INTO RES_ID FROM DUAL;select concat(DATE_FORMAT(now(),'%y%m%d%H%i%s'),LPAD(CONCAT(RES_ID,''),len,'0')) INTO cRES_ID FROM DUAL;#日期 0填充 RES_ID 到len长度ELSEselect RES_ID INTO cRES_ID FROM DUAL; END IF; #增加后缀 IF vextract IS NOT NULL and vextract != '' THEN #SELECT CONCAT(RES_ID,TO_CHAR(SYSDATE, vextract)) INTO cRES_ID FROM DUAL; select concat(LPAD(CONCAT(RES_ID,''),len,'0'),DATE_FORMAT(now(),'%y%m%d%H%i%s')) into cRES_ID from dual; END IF; RETURN cRES_ID; END
CONCAT(str1,str2....)是字符串拼接
DATE_FORMAT(now(),'%y%m%d%H%i%s')是已某格式显示日期
LPAD(str,len,str2)是在str左边填充str2直到长度为len
在sql窗口我们可以通过传任意表id来取值
开始是空表
例如:select fun_create_id('userId')
阅读全文
0 0
- 数据库 表中主键字符串通过函数取值
- 数据库主键字段取值-UUID
- 通过Java向数据库中自增主键(非自增主键)表插入记录的异常
- java 中取数据库聚合函数值的问题
- 通过sql语句向oracle数据库中插入一条记录(含有主键),系统当前时间插入表中 ,空值插入表中
- angular在HTML中去取字符串,以及$http通过headers取值
- 通过设置rowcount,从Sybase数据库中分页取数
- Spring中获取数据库表主键序列
- 数据库中随机取值
- python中通过字符串调用同名函数
- Java解决取数据时“因数据库中 字符串含空格 而取值不成功”的问题
- JS函数取字符串
- 倒序取字符串函数
- Gridview中Datakeys 通过主键取得各列的值。
- Mybatis中insert返回主键取不到
- Gridview中Datakeys 多个主键,通过主键取得各列的值。
- Gridview中Datakeys 多个主键,通过主键取得各列的值。
- C++ 中通过函数名字的字符串调用函数
- IP分片与重组详解
- 一个挺好的复选框样式,单选框也一样适用
- 20171129 自省
- SDUT-3404
- 有关 Android 应用桌面角标 (BadgeNumber) 实现的探讨
- 数据库 表中主键字符串通过函数取值
- SharePoint 2013 DateTime字段查询
- cocos2d项目如何关掉多点触摸
- LWC 60:735. Asteroid Collision
- 远程调试DEBUG YII框架
- JS正则验证(常用)
- 分水岭算法及案例
- 使用maven 下载jars,并指定settings.xml
- android高德地图自定义infoWindow、点击其它地方隐藏infoWindow、infoWindow点击事件