如何插入带有日期验证的记录

时间:2012-01-04 12:04:08

标签: sql sql-server sql-server-2000

表1

ID  Month   datefrom   dateto     reason

001 12/2011 01/12/2011 10/12/2011 Leave
001 12/2011 18/12/2011 25/12/2011 Holiday
.....

datefrom,dateto数据类型为datetime,datefrom& dateto格式为(dd/mm/yyyy

在插入datefrom之前,date to我想检查它是否与datefrom和dateto表相匹配

尝试查询(插入之前我正在检查用户输入日期是否与表匹配)

SELECT * FROM table1 
WHERE (Month = '01/2012') AND 
      (id = '001') and 
      Convert(Datetime, '01/12/2011', 103)  between datefrom and dateto or 
      Convert(Datetime, '10/12/2011', 103)  between datefrom and dateto

如果我选择2011年12月1日至2011年12月10日的日期,则上述查询有效,如果我选择2011年11月31日至2011年11月11日的日期,则表示允许插入...

如何修改我的查询....

需要查询帮助

1 个答案:

答案 0 :(得分:1)

这是一个非常(非常)疯狂的猜测。您是否正在尝试INSERT进入表格,但是您不希望[datefrom, dateto]区间与表格中的任何现有区间交叉?

如果是,你可以这样做:

INSERT INTO table1
  (datefrom, dateto)
SELECT @DateFromNewValue, @DateToNewValue
WHERE NOT EXISTS
      ( SELECT *
        FROM table1
        WHERE datefrom <= @DateToNewValue
          AND @DateFromNewValue <= dateto
      )

并且@DateNewValue格式为'yyyy-mm-dd'