回答
当您在查询中明确使用CONVERT
或CAST
关键字时,会发生显式转换。
当您在表达式中具有不同的数据类型并且SQL Server根据datatype precedence的规则自动转换时,会发生隐式转换。
例如nvarchar的具有比VARCHAR
CREATE TABLE Demo
(
X varchar(50) PRIMARY KEY
)
/*Explicit*/
SELECT *
FROM Demo
WHERE CAST(X AS NVARCHAR(50)) = N'Foo'
/*Implicit*/
SELECT *
FROM Demo
WHERE X = N'Foo' /*<-- The N prefix means nvarchar*/
更高的优先级的第二执行计划显示的
CONVERT_IMPLICIT(nvarchar(50),[D].[dbo].[Demo].[X],0)=[@1]
谓词无论是显式和隐式转换防止索引在这种情况下寻求。
隐式转换对用户不可见。 SQL Server自动将数据从一种数据类型转换为另一种数据类型。例如,当smallint
与int
比较时,smallint
在比较继续之前隐式转换为int。 GETDATE()
隐式转换成日期样式0 SYSDATETIME()
隐含21.
显式转换转换成日期样式使用CAST
或CONVERT
功能。 CAST和CONVERT函数将一个值(局部变量,列或其他表达式)从一种数据类型转换为另一种数据类型。例如,以下CAST函数的$ 157.27数字值转换成的“157.27”字符串:
CAST ($157.27 AS VARCHAR(10))
隐意味着数据库引擎将数据类型自动转换,处理用户不可见。
显式表示您必须指定数据类型应如何转换。如果你没有指定SQL Server如何将数据类型转换为你想要的(明确地),它会尝试猜测你的意图(隐式)。
隐式转换中,你不必理会转换的转换。 SQL Server自动将数据从一种数据类型转换为另一种数据类型。例如,如果将smallint与int进行比较,则在比较进行之前将smallint隐式转换为int。假设存在两列,如smallint中的num1和int中的num2。 你想比较它们(是否相等)。你必须写:
Select ..... where num1 = num2
没有什么需要的转换。
显式转换是一种转换,您必须在其中描述转换。显式转换使用CAST或CONVERT函数。例如,在'21 .01.2013'中写入的列date1。它根据提供的数据/表格以varchar格式存在。你想与'21/01/2013'格式的另一列date2进行比较。这是一个日期,但也以varchar格式提供。要比较它们(无论是否相同),你必须写:
select ....... where cast(date1 as date) =cast(date2 as date)
- 1. 隐式和显式转换
- 2. int和varchar之间的隐式转换
- 3. 删除SQL Server中的隐式转换
- 4. SQL Server的隐式转换为VARCHAR(MAX)
- 5. SQL Server隐式转换为varchar vs bigint
- 6. 显式转换和安全转换之间的差异#
- 7. 在MSExcel和SQL Server中的日期时间转换之间的区别
- 8. 隐式转换
- 9. 定义C#接口的隐式转换和显式转换
- 10. 模板之间的隐式转换
- 11. 类型转换和类型转换之间的区别?
- 12. 这两行代码中显式和隐式类型转换有什么区别?
- 13. 格式之间的转换
- 14. 隐式转换
- 15. 隐式和显式事务之间的区别
- 16. 的reference_wrapper和隐式转换
- 17. 隐式转换和舍入
- 18. SQL和Dapper性能隐式转换
- 19. Scala中的隐式转换和隐式参数之间的关系是什么?
- 20. 2个变种之间的T-SQL隐式转换
- 21. 延续和隐式转换
- 22. Typdefs和隐式转换
- 23. 显式转换总是与隐式转换相同吗?
- 24. C中的隐式转换
- 25. C++中的隐式转换
- 26. Java中的隐式转换
- 27. 在Talend之间转换SQL Server和Postgres之间的日期
- 28. DataContractJsonSerializer DateTime的隐式时区转换
- 29. 的DATETIME2显式转换到SQL Server时间戳
- 30. 隐式和显式ArrayList大小声明之间的区别?