tsql - 在T-SQL中使用DATEDIFF

标签 tsql datediff

我在SQL语句中使用DATEDIFF。我正在选择它,我也需要在WHERE子句中使用它。此声明不起作用...

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

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

但是这个说法很好用...
SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable
WHERE DATEDIFF(ss, BegTime, EndTime) <= 10

我里面的程序员说这效率低下(好像我两次调用了该函数)。

有两个问题。为什么第一个陈述不起作用?使用第二条语句执行效率低下吗?

最佳答案

您无法访问where语句中的select语句中定义的列,因为只有在执行where之后才生成它们。

您可以这样做

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

附带说明-从本质上讲,这实际上将DATEDIFF移到了where语句中。在where语句的列上使用函数会导致索引无法有效使用,因此应尽可能避免使用索引,但是,如果必须使用datediff,则必须这样做!

关于tsql - 在T-SQL中使用DATEDIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870204/

相关文章:

mysql - 查找组中特定行的两个日期列之间的平均值

java - 使用 JPA Criteria Query 比较两个日期之间的差异

php - php中的日期差异?

sql-server - SQL Server 2008 'sp_syspolicy_purge_history' 函数

c# - 如何动态连接 C# 中的 T-SQL 表,来自 ListView 的 COLUMNS

sql - DBCC freeproccache?

sql - 确定此 Delete 语句的作用

mysql - SQL group by 内日期之间的差异

SQL 从时间戳差异中提取值

sql - 从 SQL Server 中删除大量行 - 以高效且非锁定的方式