評價: 3 回應: 4 閱覽: 494
置頂

關於資料庫流水號的問題

板上各位前輩好

小弟使用的資料庫是Oracle

想請教各位,如何產生以當天日期為主的流水號

而且日期每過一天,流水號的編號就從01開始編起

例如:15121301、15121302 、15121303、15121401、15121402等

其中,『15』表示是西元2015年

其流水號格式為:yymmdd+2碼的流水號

而且要避免線上多人同時Insert資料時產生重覆的編號

且該流水號的資料欄位格式是Varchar

小弟目前想到的方法是:以當天的日期加上like 和 count 去做 select

若都沒有找到則日期補上01

若有找到,則日期前加上count回傳的筆數+1

不知是否有更好的方法呢?!

熱門回應

select max(to_number(substr(field,-2,2)))+1......

用個table存流水號

結構(表流水號,目前流水號,時間)

資料是像這樣(1,12,'150108')

每次取號用update table

set 目前流水號=目前就水號+1

where 時間='150108'

returning 目前流水號;

流水號表的record可以一次生成一年份, 365/366筆

取號則是在insert前, 可以是另一個獨立的transaction

基本上類似樓上大大的方法..

因為不確定你的是什麼系統

使用者輸入什麼資料

但通常都是user一進頁面就要取seq.nextval 埋在背景

user送出資料就把這seq一起送出 insert到table

就是號碼牌的概念,這樣不會重複取號,但容易跳號

但是用oracle要不跳號也很難就是了

create sequence [sequence_name] start with 1

increment by 1 ;

sequence_name.nextval

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言