当你a + b
在 T-SQL 中说 anda
和b
are of a string type (eg varchar(...)
or nvarchar(...)
) 时:结果类型是如何确定的?
我在试验时没有发现明确的规则。这似乎取决于是否涉及文字。
另外,长度是怎么确定的?我发现的类型'x' + 'y'
是varchar(2)
. 显然,正在跟踪文字的长度。
这是我进行的一个小实验:
USE tempdb
DECLARE @v VARCHAR(400) = 'x'
DECLARE @n NVARCHAR(400) = 'x'
SELECT
'' AS [varchar]
, N'' AS [nvarchar]
, ('x' + N'x') AS ['x' + N'x']
, (N'x' + 'x') AS [N'x' + 'x']
, (ISNULL('x', N'x')) AS [ISNULL('x', N'x')]
, (ISNULL(N'x', 'x')) AS [ISNULL(N'x', 'x')]
, (COALESCE('x', N'x')) AS [COALESCE('x', N'x')]
, (COALESCE(N'x', 'x')) AS [COALESCE(N'x', 'x')]
, (@v + @n) AS [@v + @n]
, (@n + @v) AS [@n + @v]
, (ISNULL(@v, @n)) AS [ISNULL(@v, @n)]
, (ISNULL(@n, @v)) AS [ISNULL(@n, @v)]
, (COALESCE(@v, @n)) AS [COALESCE(@v, @n)]
, (COALESCE(@n, @v)) AS [COALESCE(@n, @v)]
INTO StringConversionTest
文档指出了 的行为,ISNULL
所以COALESCE
我理解那部分。但+
运营商似乎在一套更复杂的规则下行事。
在几种情况下,两个(或更多)不同的事物被组合在一起,但只能有一个结果。这些问题通过应用一组优先规则来解决。在这种情况下,它将同时使用数据类型优先级和排序规则优先级。但也有逻辑优先级(当不带括号组合 AND 和 OR 时)以及如何处理不同精度的十进制计算等)。
数据类型优先级
整理优先级
精度、比例和长度
有关的: