澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:日期格式转换方法整理,

2019-09-11 作者:www.8455.com   |   浏览(170)

  最近在做项目过程中,经常会遇到生成订单流水号唯一性的应用,也有不少同事也请教我对唯一性的 "流水号"的问题,根据个人所见,一般生成的规则都是根据日期来进行操作,我目前在做的一个项目:”报告卡“上的编码就是根据 ”yyyyMMdd 四位数字(累加)“的格式生成,一般对这一类的操作最好是在存储过程中生成。

流水号由8位日期加8位顺序号组成,如2010030200000056。
先从数据库中取中最大的流水号,和此时要生成的日期比较是否在同一天,是则顺序号加1,否则重新以此时日期生成流水号

C#

C#

C#

  下面,我们来简单的举两种方法来生成订单流水号的唯一性:

Oracle sql:
select nvl(max(serialnumber),0) as maxSerialNumber from tb

//将格式为yyyyMMdd的时间转化为yyyy-MM-dd类型

//将格式为yyyyMMdd的时间转化为yyyy-MM-dd类型

//将格式为yyyyMMdd的时间转化为yyyy-MM-dd类型

(1)通过存储过程方式生成(以Oracle为例)

       /// <summary>
        /// 生成充值流水号格式:8位日期加8位顺序号,如2010030200000056。
        /// </summary>
        public string GetSerialNumber(string serialNumber)
        {
            if (serialNumber != "0")
            {
                string headDate = serialNumber.Substring(0, 8);
                int lastNumber = int.Parse(serialNumber.Substring(8));
                //如果数据库最大值流水号中日期和生成日期在同一天,则顺序号加1
                if (headDate == DateTime.Now.ToString("yyyyMMdd"))
                {
                    lastNumber ;
                    return headDate lastNumber.ToString("00000000");
                }
            }
            return DateTime.Now.ToString("yyyyMMdd") "00000001";
        }

详例:

详例:

详例:

Create Or Replace Procedure MyProcedure

网上还有创建存放流水号的表,用存储过程生成流水号

string beginDate="20140224";  
beginDate =DateTime.ParseExact(beginDate,"yyyyMMdd",CultureInfo.CurrentCulture).ToString( "yyyy-MM-dd");

string beginDate="20140224";  
beginDate =DateTime.ParseExact(beginDate,"yyyyMMdd",CultureInfo.CurrentCulture).ToString( "yyyy-MM-dd");

string beginDate="20140224";
beginDate =DateTime.ParseExact(beginDate,"yyyyMMdd",CultureInfo.CurrentCulture).ToString( "yyyy-MM-dd");

{

 

 

//Server:如何将yyyymmddHHmmss转换为yyyy-MM-dd HH:mm:ss格式

CV_1 OUT NVARCHAR2

//Server:如何将yyyymmddHHmmss转换为yyyy-MM-dd HH:mm:ss格式

//Server:如何将yyyymmddHHmmss转换为yyyy-MM-dd HH:mm:ss格式

详例:

}

详例:

详例:

SELECT CAST(( CAST(CONVERT(DATE, LEFT(CONVERT(NVARCHAR, ISNULL(Memo9,
'19000101000000')),
8)) AS NVARCHAR

AS

SELECT CAST(( CAST(CONVERT(DATE, LEFT(CONVERT(NVARCHAR(50), ISNULL(Memo9,
'19000101000000')),
8)) AS NVARCHAR(10))

SELECT CAST(( CAST(CONVERT(DATE, LEFT(CONVERT(NVARCHAR(50), ISNULL(Memo9,
'19000101000000')),
8)) AS NVARCHAR(10))

  • ' '
  • SUBSTRING(CONVERT(NVARCHAR, ISNULL(Memo9,
    '19000101000000')),
    9, 2) ':'

澳门新萄京官方网站:日期格式转换方法整理,订单流水号的生成。BEGIN

  • ' '
  • SUBSTRING(CONVERT(NVARCHAR(50), ISNULL(Memo9,
    '19000101000000')),
    9, 2) ':'
  • ' '
  • SUBSTRING(CONVERT(NVARCHAR(50), ISNULL(Memo9,
    '19000101000000')),
    9, 2) ':'

SUBSTRING(CONVERT(NVARCHAR, ISNULL(Memo9,
'19000101000000')),
11, 2) ':'

DECLARE

SUBSTRING(CONVERT(NVARCHAR(50), ISNULL(Memo9,
'19000101000000')),
11, 2) ':'

SUBSTRING(CONVERT(NVARCHAR(50), ISNULL(Memo9,
'19000101000000')),
11, 2) ':'

  • SUBSTRING(CONVERT(NVARCHAR, ISNULL(Memo9,
    '19000101000000')),
    13, 2) ) AS DATETIME)
    FROM Invoice;

V_CURRENTCODE NVARCHAR2(100)

  • SUBSTRING(CONVERT(NVARCHAR(50), ISNULL(Memo9,
    '19000101000000')),
    13, 2) ) AS DATETIME)
    FROM Invoice;
  • SUBSTRING(CONVERT(NVARCHAR(50), ISNULL(Memo9,
    '19000101000000')),
    13, 2) ) AS DATETIME)
    FROM Invoice;

//将System.DateTime对象的值转换为文件时间

BEGIN

 //将System.DateTime对象的值转换为文件时间

 //将System.DateTime对象的值转换为文件时间

Datetime.Now.ToFileTime();

SELECT MAX([编码字段名]) INTO V_CURRENTCODE FROM [表名];

Datetime.Now.ToFileTime();

Datetime.Now.ToFileTime();

//将文件时间转换为System.DateTime对象

IF substr(V_CURRENTCODE,8) = to_char(sysdate,'yyyymmdd') THEN

//将文件时间转换为System.DateTime对象

//将文件时间转换为System.DateTime对象

DateTime.FromFileTime();

SELECT

DateTime.FromFileTime();

DateTime.FromFileTime();

CAST(

CAST(nvl(Max(substr([编码字段名] , 0 ,8)),0) AS nvarchar2(30)) || CAST(nvl(Max(substr([编码字段名] , 9 ,4)),0) AS nvarchar2(30))

AS INT) 1

AS [编码字段名]

INTO CV_1

FROM [表名]

dbms_output.put_line(CV_1);

ELSE

SELECT DISTINCT(to_char(sysdate,'yyyymmdd')|| '0001') as [编码字段名] into CV_1 from dual ;

dbms_output.put_line(CV_1);

END IF;

END;

至于调用存储过程我这里就不举例子了,微软有专门提供访问数据层中存在调用 ”存储过程“的方法。

 

(2)通过程序代码方式生成

/// <summary>
/// 生成流水号
/// </summary>
public class OrderHelper
{
/// <summary>
/// 帮助类
/// </summary>
private OrderHelper() { }

/// <summary>
/// 生成订单编号
/// 生成规则yyyyMMdd 四位数字
/// </summary>
/// <returns></returns>
public static string GetOrderCode(string code)
{
if (string.IsNullOrWhiteSpace(code)) return string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMdd"), "0001");
if (code.TrimEnd().Length <= 11 || code.TrimEnd().Length >= 13) return "当前编码规则不正确!";
if (code.Substring(0, 8) == DateTime.Now.ToString("yyyyMMdd").TrimEnd())
{
if (Convert.ToInt32(code.Substring(9, 4)) >= 9999) return "当前编码规则已最大值,联系管理员扩大存储容量!";
return string.Format("{0}{1}", code.Substring(0, 8), (Convert.ToInt32(code.Substring(9, 4)) 1).ToString());
}
else
return string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMdd"), "0001");
}

}

只需调用静态方法即可返回编码。

本文章是新注册用户的第一篇文章,有不足之处,请留言赐教。。。

A Young idler  ~  an old beggar!

本文由澳门新萄京官方网站发布于www.8455.com,转载请注明出处:澳门新萄京官方网站:日期格式转换方法整理,

关键词: