2017-04-06 77 views
0

我有点糊涂评估将下面的语句在SQL语句:需要帮助评估

AND getdate() BETWEEN fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01') 

每当我想要得到的日期范围为列说,员工的StartDate,我会做这样的事情:

AND StartDate BETWEEN fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01') 

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

谢谢。

+0

什么是真正的问题,您StartDate的价值什么不清楚给你? –

+0

不妨说明你在做什么......看看你实际上在看员工主人和职业史的结构 – maSTAShuFu

+0

Hi Tim/rhian, 我不确定第一个陈述是如何评估的?我得到第二个陈述,即基本上开始日期列的记录将返回落在fti.effectivestart和isnull之间(fti.effectiveend,'2050-01-01') –

回答

0

2个语句之间的唯一区别是,一个是针对当前日期(getdate()),另一种是针对给定的日期(StartDate)比较比较。

也就是说,第一个发言的验证,如果执行的当前日期(现在)是between fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01')

而第二个将验证对条件between fti.effectivestart AND ISNULL(fti.effectiveend, '2050-01-01')

0

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

第一个评估当前时间。这是getdate()返回的内容。

第二种方法的评估结果为StartDate,每一行可能不同。

难道你对此感到困惑吗?

一对夫妇的注意事项:

  • coalesce()通常(但并不总是)最好isnull()是因为前者是ANSI标准。
  • 如果你的效果和结束日期是日期(没有时间分量),那么你可能想要cast(getdate() as date)
  • 使用日期时需要注意between。我假设这张桌子是按照预期设计的。
+0

嗨Gordon感谢您的回应。是的,所以我只是试图运行一个sql语句,我得到了重复的记录返回。我的朋友建议我使用AND getdate()BETWEEN fti.effectivestart AND isnull(fti.effectiveend,'2050-01-01') 但我不确定如何评估它。 –

+0

@JackJames。 。 。您可能会得到重复的记录,因为'between'是比较日期的错误方法。您可以使用示例数据询问*另一个*问题,并显示生成重复项的示例数据。 –

+0

@GordonLinoff“之间是比较日期的错误方法。”谨慎阐述? – artm