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"。
重要的不是让一行代码更易于维护,而是对您的所有工作采用这种方法,这对长期 运行.
产生影响
里斯
当获取一个 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"。
重要的不是让一行代码更易于维护,而是对您的所有工作采用这种方法,这对长期 运行.
产生影响里斯