oracle与sqlserver利用函数生成年月日加流水号

最近在做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.当然实现流水号不止函数这种方式,也可以利用存储过程来实现,有兴趣的朋友可以研究下。

时间: 2024-10-08 02:48:47

oracle与sqlserver利用函数生成年月日加流水号的相关文章

你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安全性:    Oracle的安全认证获得最高认证级别的ISO标准认证,而SQL Server并没有获得什么安全认证:    这方面证明了Oracle的安全性是高于SQL Server的: --数据类型.函数.sql语句:    oracle中有复合数据类型,sql server中没有: 总之:   

Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver

此文主要讲述在初学 Java 时,常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-31 10:46:48,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKEWbBntAjtKy  访问密码 bd58 以下为初学 Java 常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码,敬请参阅! MyS

Oracle 与 SqlServer 的区别浅析总结

我主要用过的数据库为Oracle10g和SqlServer2008,通过实际运用和查阅资料整理如下: 主题 Oracle 10g SQLServer 2008 存储过程格式 Create Or Replace Procedure 存储过程名 (参数列表) IS Begin ---存储过程内容 End 存储过程名; Create Procedure 存储过程名  (参数列表) AS Begin --存储过程内容 End 存储过程参数 1.指定参数类型,但不指定长度; 2.在参数及类型间要加入输入输

Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)

首先,我们需要准备数据库连接所需的jar包.目前mysql的驱动包可能比较好找,但是oracle和sqlserver的有很多,要找到能用的要花一点点心思,这里直接把下载地址和版本发送出来. Mysql: 驱动程序包:mysql-connector-java-5.1.38.jar 下载地址:http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38     驱动:com.mysql.jdbc.driver     url:

Oracle转SqlServer

基础数据所对应的类型不同 在Oracle中有一些基础类型与Sqlserver中名字一样,但是所存储的数据格式不同,Date类型在Oracle中精确到秒,在Sqlserver中只能精确到分 表的结构 Oracle中所有的表都有一个共同的字段,rowid这是在物理上存在的,记录了每一条记录的行位置,rownum 是逻辑上的,根据排序方式的不同会出现不同的rownum,因为Oracle的这个特性,经常在进行一些crud操作的时候会通过rowid来进行,导致在转数据库的时候会遇到各种麻烦,所以我建议各位

SqlServer 利用游标批量更新数据

原文:SqlServer 利用游标批量更新数据 SqlServer 利用游标批量更新数据 Intro# 游标在有时候会很有用,在更新一部分不多的数据时,可以很方便的更新数据,不需要再写一个小工具来做了,直接写 SQL 就可以了 Sample# 下面来看一个实际示例: Copy -- 声明字段变量 DECLARE @RegionCode INT; DECLARE @RegionName NVARCHAR(64); DECLARE @ProvinceId INT; -- 声明游标 DECLARE P

微信平台开发之利用本地环境加新花生壳解释做测试环境

准备工作: 1.搭建本地PHP开发环境. 2.注册并安装新花生壳. 3.注册微信公众平台帐号. 第一步:搭建本地PHP开发环境,案例使用wamp集成环境. 下载并安装集成环境确保集成环境正常运行. 第二步:注册并安装新花生壳,过程(略). 具体教程可查看http://www.oray.com/ 第三步:对开发环境做解释. 登陆花生壳做解释: 开放wamp的外部访问:教程http://hi.baidu.com/aubbll/item/8bd5a52253d3ecd7a517b685 至此,外网就可

MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

网上看见了好多例子都基本上是一样的,没有过多的解释,对于一个初学MySQL来说有点难,我把部分转摘过来如下 原文:http://www.cnblogs.com/buro79xxd/archive/2012/08/29/2662489.html 要求目标:1.确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次. 创建表格:2.来创建实例数据: drop table if exists heyf_t10; create table heyf_t10 (empid int ,deptid i

Android利用Volley异步加载数据完整详细示例(二)

MainActivity如下: package cc.y; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.os.Bundle; import android.util.LruCache; import android.widget.ImageView;