程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle與sqlserver利用函數生成年月日加流水號,oraclesqlserver

oracle與sqlserver利用函數生成年月日加流水號,oraclesqlserver

編輯:Oracle教程

oracle與sqlserver利用函數生成年月日加流水號,oraclesqlserver


最近在做oracle相關的項目,剛接觸oracle,與sqlserver語法上還是有區別的

sqlserver :

示例:FX+當前年月日+00001

如下圖流水號實力所示

原理:

首先 'FX'是固定的,獲取當前年月日方法在sqlserver中分別是:

1.年:YEAR(GETDATE())

2.月:month(getdate())

3.日:DAY(GETDATE())

其次最主要的是流水號自動加1,主要思路是獲取到當前表中FxNum最大的數(後6位最大的數),並且用right函數獲取後6位並且加1。

 sql函數代碼如下:

Create function [dbo].[f_GetFxNum]()
returns varchar(15)
as
begin
declare @FxNum varchar(15)
declare @time varchar(8)
set @time=CONVERT(varchar,YEAR(GETDATE()))+RIGHT('00'+CONVERT(varchar,month(getdate())),2)+CONVERT(varchar,DAY(GETDATE()))--取到當前年月日
select @FxNum='FX'+@time+RIGHT(100000+ISNULL(RIGHT(MAX(FxNum),5),0)+1,5)--獲取當前表最大值並加1
from PX_FxRecord
return @FxNum
end

ALTER TABLE PX_FxRecord ADD DEFAULT ([dbo].[f_GetFxNum]()) FOR FxNum --將該函數綁定到FxNum作為該字段的默認值

參數說明:

Right(str,len) -字段返回最右邊的len個字符的字符串str
MAX()    -字段中最大的值
IsNull()    -判斷內容是否為空

convert()       -格式轉換

Oracle:

oracle比sql語法上簡單精煉一點,其實思路都一樣,編碼模式以'FX'開頭後8位年月日再加8位流水號,在該表中查詢當日最大號加1,若沒有,則從系統時間最小數開始(FX+當前年月日+000001),一直加1.

sql中的right函數在oracle中用substr代替

oracle函數代碼如下:

 

create or replace function f_GetFxNum
return nvarchar2
as
 FxNum nvarchar2(16);
begin
SELECT 'FX'||(NVL(MAX(SUBSTR(FxNum,3,14)),TO_CHAR(SYSDATE,'YYYYMMDD')||'000000')+1) into FxNum FROM PX_FxRecord   WHERE SUBSTR(FxNum,3,8)=TO_CHAR(SYSDATE,'YYYYMMDD') ;
return FxNum;
end;

 

 

 

參數說明:

1.substr(str,截取開始位置,len) //返回截取的字, right(str,len) 返回從最右邊開始len個字符串

2.TO_CHAR(SYSDATE,'YYYYMMDD') //返回當前年月日

3.NVL() // NVL(str1,str2) 如果oracle第一個參數為空那麼顯示第二個參數的值,如果第一個參數的值不為空,則顯示第一個參數本來的值。

總結

1.oracle和sqlserver思想原理都差不多,基於sql開發,只是語法實現方式上不同。

2.當然實現流水號不止函數這種方式,也可以利用存儲過程來實現,有興趣的朋友可以研究下。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved