需要帮助评估SQL语句

时间:2017-04-06 01:14:45

标签: sql sql-server sql-server-2008

我对评估下面的陈述感到有点困惑:

 func getAspectFillFrame(sizeImageView : CGSize, sizeImage: CGSize) -> CGRect {

        let aspect = sizeImage.width / sizeImage.height
        let rect: CGRect

        if sizeImageView.width / aspect > sizeImageView.height {

            let height = sizeImageView.width / aspect

            rect = CGRect(x: 0, y: (sizeImageView.height - height) / 2,
                          width: sizeImageView.width, height: height)

        } else {
            let width = sizeImageView.height * aspect
            rect = CGRect(x: (sizeImageView.width - width) / 2, y: 0,
                          width: width, height: sizeImageView.height)
        }

        return rect

    }

    func getAspectFitFrame(sizeImgView:CGSize, sizeImage:CGSize) -> CGRect {

        let imageSize:CGSize  = sizeImage
        let viewSize:CGSize = sizeImgView

        let hfactor : CGFloat = imageSize.width/viewSize.width
        let vfactor : CGFloat = imageSize.height/viewSize.height

        let factor : CGFloat = max(hfactor, vfactor)

        // Divide the size by the greater of the vertical or horizontal shrinkage factor
        let newWidth : CGFloat = imageSize.width / factor
        let newHeight : CGFloat = imageSize.height / factor

        var x:CGFloat = 0.0
        var y:CGFloat = 0.0
        if newWidth > newHeight{
            y = (sizeImgView.height - newHeight)/2
        }
        if newHeight > newWidth{
            x = (sizeImgView.width - newWidth)/2
        }
        let newRect:CGRect = CGRect(x: x, y: y, width: newWidth, height: newHeight)

        return newRect

    }

每当我想要一个列的日期范围说员工的AND getdate() BETWEEN fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01') 时,我会做这样的事情:

StartDate

有人可以帮我理解差异吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

这两个语句都返回一个在某个时间点有效的记录。

首先评估当前时间。这就是getdate()返回的内容。

评估第二个StartDate,每行可能不同。

这是你感到困惑的吗?

一对夫妇注意到:

  • coalesce()通常(但并非总是)优于isnull(),因为前者是ANSI标准。
  • 如果您的效果和结束日期是日期(没有时间组件),那么您可能需要cast(getdate() as date)
  • 使用between日期时需要小心。我假设表已设置,因此按预期工作。

答案 1 :(得分:0)

两个陈述之间的唯一区别是,一个是与当前日期(getdate())进行比较,另一个是与给定日期(StartDate)进行比较。

也就是说,第一个语句正在验证当前执行日期(现在)是between fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01')

而第二个会根据条件StartDate

验证between fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01')的值