SQL Server中隐式转换和显式转换的区别

时间:2014-01-07 09:26:22

标签: sql sql-server implicit-conversion

请告诉我SQL Server中的隐式转换和显式转换之间的区别?

我已经搜索过这个但我无法得到它。

4 个答案:

答案 0 :(得分:10)

在查询中明确使用CONVERTCAST关键字时,会发生显式转换。

当表达式中有不同的数据类型且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]

在这种情况下,显式和隐式转换都会阻止索引搜索。

答案 1 :(得分:4)

隐式转化对用户不可见。 SQL Server自动将数据从一种数据类型转换为另一种数据类型。例如,当smallintint进行比较时,smallint会在比较进行之前隐式转换为int。 GETDATE()隐式转换为日期样式0. SYSDATETIME()隐式转换为日期样式21.

明确转化使用CASTCONVERT函数。 CAST和CONVERT函数将值(局部变量,列或其他表达式)从一种数据类型转换为另一种数据类型。例如,以下CAST函数将 $ 157.27 的数值转换为'157.27'的字符串

CAST ( $157.27 AS VARCHAR(10) )

答案 2 :(得分:2)

隐式表示数据库引擎将自动转换数据类型,这是用户不可见的进程。

显式表示您必须指定数据类型的转换方式。如果您没有指定SQL Server如何将数据类型转换为您想要的(显式),它将尝试猜测您的意图(隐式)。

link

答案 3 :(得分:1)

隐式转化是一种转换,您无需担心转化。 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)