T-SQL DATE 数据类型的隐式与显式转换

T-SQL implicit vs. explicit casting for DATE datatype

当获取一个 DATETIME 值并将其更改为 T-SQL 中的 DATE 值时,是否应该显式执行 CAST?例如:

DECLARE @Today_NoCast DATE = GETDATE();
DECLARE @Today_Cast DATE = CAST(GETDATE() AS DATE);

SELECT [GETDATE()] = GETDATE();

SELECT
[@Today_NoCast] = @Today_NoCast,
[@Today_Cast] = @Today_Cast;

@Today_NoCast 和@Today_Cast 都给出了想要的结果。但是什么算"best practice"?

Date 中的数据类型时。您不必进行 explicit 转换。

所以避免使用 explicit 转换

你举的例子就是所谓的"implicit conversion"。换句话说 SQL 服务器猜测转换它的最佳方式。这些转换在 pretty diagram on MSDN 上。由于 SQL 服务器将隐式执行此操作,因此您无需显式执行。你只是在增加噪音。

就我个人而言,我喜欢尽可能少地进行日期操作。否则,您往往会发现人们到处乱扔代码,导致代码异味。

如果您需要时间部分并因此存储时间,您可以根据需要格式化 UI 中的时间。

如果您发现需要在您的日期和时间上创建 WHERE 子句的查询,请考虑将日期和时间分离到单独的字段中以防止 SEARCHARG,即开发人员在 where 子句中围绕您的索引列包装函数,从而防止优化器使用索引,从而降低性能。

就 SQL 服务器而言,在这种情况下没有区别 - 隐式(无 CAST)和显式转换将产生相同的结果。

但是,从代码维护的角度来看,还是有细微差别的。隐式转换只是另一行代码,可能(根据我的经验,没有反映你!)没有任何评论或文档或其他任何东西。同一个地方的显式转换也说"the person who wrote this code knows that GETDATE returns a DATETIME but they don't want the TIME part so are deliberately just saving it into a DATE"。

重要的不是让一行代码更易于维护,而是对您的所有工作采用这种方法,这对长期 运行.

产生影响

里斯