• 一道很贱的面试题


    数据库有某表有三个主键ID,日期From,日期To,其中某ID下日期From一定小于等于日期To。如何判断新插入的字段日期区间互相不重叠,新插入的字段日期From也一定小于等于日期To。

     也就是说这样的数据是可以的

    而这样的数据都是不行的

    我一开始的思路是这样的

     就是要开始时间大于结束时间或者结束时间小与开始时间

    于是写出了这样的SQL

    SELECT COUNT(1) FROM XXXXXXX
     WHERE No = @No
     AND SubNo = @SubNo
     AND NOT (@EndDate < StartDate
     OR @StartDate > EndDate)
    

      可是这是不对的反例如下:

     假设你只有一条记录,10-20 ,要插入 9-25,根据你现在的9>20||25<20 

    我只好找出所有应该报错的情况,分三种,以下应该是正确的,如果是错误的我会更新

     SELECT COUNT(1) FROM XXXXXXX
     WHERE No = @No
     AND SubNo = @SubNo
     AND 
     (StartDate < @StartDate AND @StartDate < EndDate)   --在期间的情况
     OR (StartDate < @EndDate AND @EndDate < EndDate)       --在期间的情况
     OR (@StartDate< StartDate  AND EndDate < @EndDate)     --包括的情况 
  • 相关阅读:
    物料清单概述
    java开发webservice的1种方式
    java web service简单示例
    IOS证书过期
    Windows 2012 R2 安装net4.6.1
    sqlserver 性能调优脚本
    solidty--owner.sol
    ERC20-USDT
    EOS 公开节点及自有节点部署
    微信第三方平台授权流程
  • 原文地址:https://www.cnblogs.com/mihe/p/3868821.html
Copyright © 2020-2023  润新知