微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

tsql – 在T-SQL中使用DATEDIFF

我在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,那么你必须这样做!

原文地址:https://www.jb51.cc/mssql/76404.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐