日期:2014-05-18  浏览次数:20777 次

数据库 备案编号
我想在数据库中设计一个字段(beianbianhao),然后让其按一定的规则进行自动排序。
设计成XXXX-YYYY其中XXXX表示年份,YYYY表示自动编号。列如:20120001
先谢谢大家!


------解决方案--------------------
要不说这个世界还真是巧,真是有缘啊。。。。
我搞好有个一模一样的功能。。。。直接复制了。
C# code

public string getLog_No()
        {
            string strTemp="";
            string sql="select * from (select nvl(log_no,'0') from equip_change_logic t order by log_id desc) where rownum<=1";
            MyOraComm.ConnForOracle cfo=new MyOraComm.ConnForOracle("connstr");
            cfo.OpenConn();
            System.Data.OracleClient.OracleDataReader oraDataRead=cfo.ReturnDataReader(sql);
            if(oraDataRead.Read())
                strTemp=oraDataRead[0].ToString();
            else
                strTemp="0";
            oraDataRead.Close();
            cfo.CloseConn();
            if(strTemp.Length==7)
            {
                string year,xuhao;
                year=strTemp.Substring(0,4);
                xuhao=strTemp.Substring(4,3);
                if(year==System.DateTime.Now.ToString("yyyy"))
                {
                    strTemp=(int.Parse(strTemp)+1).ToString();
                }
                else
                    strTemp=System.DateTime.Now.ToString("yyyy")+"001";
            }
            else
            {
                strTemp=System.DateTime.Now.ToString("yyyy")+"001";
            }
            return strTemp;
        }

------解决方案--------------------
用纯粹的sql效率会比较高些。

create table #temp(
Id int identity(1,1),
DDateTime datetime
)
go

insert into #temp(DDateTime)
select '2010-1-1'
union all
select '2011-2-1'
union all
select '2012-1-1'
union all
select '2011-4-1'
union all
select '2010-1-1'

select *,datepart(year,DDateTime)*1000+id from #temp order by datepart(year,DDateTime)*1000+id asc