2014-01-07 49 views

回答

6

当您在查询中明确使用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] 

谓词无论是显式和隐式转换防止索引在这种情况下寻求。

3

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

显式转换转换成日期样式使用CASTCONVERT功能。 CAST和CONVERT函数将一个值(局部变量,列或其他表达式)从一种数据类型转换为另一种数据类型。例如,以下CAST函数的$ 157.27数字值转换成的“157.27”字符串:

CAST ($157.27 AS VARCHAR(10)) 
2

意味着数据库引擎将数据类型自动转换,处理用户不可见。

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

link

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)