Sql server 在SQL SERVER中与COALESCE一起使用时GETDATE()的奇怪行为

Sql server 在SQL SERVER中与COALESCE一起使用时GETDATE()的奇怪行为,sql-server,coalesce,getdate,Sql Server,Coalesce,Getdate,以上回报 DECLARE @i INT SET @i=14 SELECT COALESCE(@i, GetDate()); 现在如果我把I改为11,结果会是 1900-01-15 00:00:00.000 GETDATE()是否应返回当前日期时间? 当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型。 1900-01-01+14是1900-01-15,您的int被转换为datetime,因为coalesce的第二个参数是datet

以上回报

DECLARE @i INT

SET @i=14

SELECT COALESCE(@i, GetDate());
现在如果我把I改为11,结果会是

1900-01-15 00:00:00.000
GETDATE()是否应返回当前日期时间?

当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型。

1900-01-01+14是1900-01-15,您的int被转换为datetime,因为coalesce的第二个参数是datetime

当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型。


1900-01-01+14是1900-01-15,您的int被转换为datetime,因为coalesce的第二个参数是datetime

我想您可能对coalesce的工作原理有点困惑。如果第一个参数不为null,为什么您希望任何合并都返回第二个参数?这更多地与数据类型优先级有关,然后将int转换为datetime。由于第一个参数不为null,它将查看所涉及的优先级或数据类型。然后将第一个非null参数转换为datatypeI,我想您可能对COALESCE的工作方式有点困惑。如果第一个参数不为null,为什么您希望任何合并都返回第二个参数?这更多地与数据类型优先级有关,然后将int转换为datetime。由于第一个参数不为null,它将查看所涉及的优先级或数据类型。然后将第一个非null参数转换为该DataTypeThank的值。在我尝试选择CAST(@I as DateTime);,之后有意义;。谢谢在我尝试选择CAST(@I as DateTime);,之后有意义;。
1900-01-12 00:00:00.000