加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

tsql – 在T-SQL中使用DATEDIFF

发布时间:2020-12-12 07:49:14 所属栏目:MsSql教程 来源:网络整理
导读:我在SQL语句中使用DATEDIFF.我正在选择它,我也需要在WHERE子句中使用它.这句话不起作用…… SELECT DATEDIFF(ss,BegTime,EndTime) AS InitialSaveFROM MyTableWHERE InitialSave = 10 它给出了消息:无效的列名“InitialSave” 但这句话很好…… SELECT DATED
我在SQL语句中使用DATEDIFF.我正在选择它,我也需要在WHERE子句中使用它.这句话不起作用……
SELECT DATEDIFF(ss,BegTime,EndTime) AS InitialSave
FROM MyTable
WHERE InitialSave <= 10

它给出了消息:无效的列名“InitialSave”

但这句话很好……

SELECT DATEDIFF(ss,EndTime) AS InitialSave
FROM MyTable
WHERE DATEDIFF(ss,EndTime) <= 10

我的程序员说这是低效的(似乎我在调用函数两次).

所以有两个问题.为什么第一个陈述不起作用?使用第二个语句来执行它是否效率低下?

解决方法

您不能访问where语句中select语句中定义的列,因为它们只有在执行where之后才会生成.

但是你可以这样做

select InitialSave from 
(SELECT DATEDIFF(ss,EndTime) AS InitialSave
FROM MyTable) aTable
WHERE InitialSave <= 10

作为旁注 – 这基本上将DATEDIFF移动到where语句中,就其首次定义的位置而言.在where语句中的列上使用函数会导致索引无法有效使用,如果可能的话应该避免使用,但是如果你必须使用datediff,那么你必须这样做!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读