convert(varchar(10),时间1,120) = convert(varchar(10),时间2,120)

解决方案 »

  1.   

    2
    用触发器--以下代码生成的编号长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(6),GETDATE(),12)
    GO--得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(12)
    AS
    BEGIN
    DECLARE @dt CHAR(6)
    SELECT @dt=dt FROM v_GetDate
    RETURN(
    SELECT @dt+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) 
    FROM tb WITH(XLOCK,PAGLOCK)
    WHERE BH like @dt+'%')
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    INSERT tb(col) VALUES(1)
    INSERT tb(col) VALUES(2)
    INSERT tb(col) VALUES(3)
    DELETE tb WHERE col=3
    INSERT tb(col) VALUES(4)
    INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)--显示结果
    SELECT * FROM tb
    /*--结果
    BH           col 
    ------------------- ----------- 
    050405000001  1
    050405000002  2
    050405000003  4
    050405000004  14
    --*/
      

  2.   

    datediff(d,'2008-05-14 16:08:02.187','2008-05-14 18:10:39.967') = 0
      

  3.   

    1.对日期,可比较字符串或比较年月日
     比较字符串
      convert(char(10),日期1,120)=convert(char(10),日期2,120)
     比较年月日 
      year(日期1)=year(日期2) and month(日期1)=month(日期2) and day(日期1)=day(日期2)2.记录变化,在触发器中只要求出当日的最大数,再加1,得出最大值,再插入数据即可,对相应字段建索引,可加快查询速度
      

  4.   

    DATEDIFF ( datepart , startdate , enddate ) 
    返回跨越两个指定日期的日期和时间边界的数目。 日期部分  缩写  
    年份 
     yy、yyyy 
     
    季度 
     qq、q 
     
    月份 
     mm、m 
     
    每年的某一日 
     dy、y 
     
    日期 
     dd、d 
     
    星期 
     wk、ww 
     
    工作日
     dw
     
    小时 
     hh 
     
    分钟 
     mi、n 
     
    秒 
     ss、s 
     
    毫秒 
     ms 
     
      

  5.   

    反正你加入的标号是依据时间的顺序的.你显示的时候在自己从1开始加入连续的序号不就行了吗?何必这么多余的费时费事呢?完全没有必要使用这种方法去实现,这属于设计上的低级错误.我开发数据库有六,七年时间了.也没有预见这样设计的,将来维护数据的时候如果客户从连续序号记录中间删除若干条记录或增加若干条记录,这是你的显示序号的数据更新就会变得非常烦琐.在此建议:把日前字段改为datetime类型,即可完成自动排序.