SQL COALESCE 函数如何工作?
How does this SQL COALESCE Function Work?
我正在使用我在网站上找到的一些代码,但我无法理解这个问题。
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']',
'[' + CONVERT(NVARCHAR, [DATE], 106) + ']')
FROM (SELECT DISTINCT [DATE] FROM #DailyReport ) PV order by [DATE]
它returns
[02 May 2016],[03 May 2016],[04 May 2016],[05 May 2016],[06 May 2016],[08 May 2016],[09 May 2016],[10 May 2016],[11 May 2016],[12 May 2016],[13 May 2016],[15 May 2016],[16 May 2016],[17 May 2016],[18 May 2016],[19 May 2016],[20 May 2016],[22 May 2016],[23 May 2016],[24 May 2016],[25 May 2016],[26 May 2016],[27 May 2016],[29 May 2016],[30 May 2016],[31 May 2016]
但是它是如何工作的呢?我希望我了解我是如何获得所有这些列的以及为什么有两个“[”+ CONVERT(NVARCHAR, [DATE], 106) +“]”短语。
您指出的两个短语非常coalesce()
有效。有一种更简单的方法来编写逻辑。也许这将有助于解释发生了什么:
SELECT @cols = COALESCE(@cols + ',', '') + '[' + CONVERT(NVARCHAR(255), [DATE], 106) + ']',
FROM (SELECT DISTINCT [DATE] FROM #DailyReport
) PV
ORDER BY [DATE];
在您的例子中,完整连接是 COALESCE()
的第一个参数,因此需要表达式作为第一个参数。但是,如果那是NULL
,那么又需要它了。
注意:当使用VARCHAR()
、NVARCHAR()
或SQL服务器中的任何字符类型时,您应该总是包含一个长度说明符.默认长度因上下文而异,如果默认长度不够大,则很难找到错误。
我正在使用我在网站上找到的一些代码,但我无法理解这个问题。
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']',
'[' + CONVERT(NVARCHAR, [DATE], 106) + ']')
FROM (SELECT DISTINCT [DATE] FROM #DailyReport ) PV order by [DATE]
它returns
[02 May 2016],[03 May 2016],[04 May 2016],[05 May 2016],[06 May 2016],[08 May 2016],[09 May 2016],[10 May 2016],[11 May 2016],[12 May 2016],[13 May 2016],[15 May 2016],[16 May 2016],[17 May 2016],[18 May 2016],[19 May 2016],[20 May 2016],[22 May 2016],[23 May 2016],[24 May 2016],[25 May 2016],[26 May 2016],[27 May 2016],[29 May 2016],[30 May 2016],[31 May 2016]
但是它是如何工作的呢?我希望我了解我是如何获得所有这些列的以及为什么有两个“[”+ CONVERT(NVARCHAR, [DATE], 106) +“]”短语。
您指出的两个短语非常coalesce()
有效。有一种更简单的方法来编写逻辑。也许这将有助于解释发生了什么:
SELECT @cols = COALESCE(@cols + ',', '') + '[' + CONVERT(NVARCHAR(255), [DATE], 106) + ']',
FROM (SELECT DISTINCT [DATE] FROM #DailyReport
) PV
ORDER BY [DATE];
在您的例子中,完整连接是 COALESCE()
的第一个参数,因此需要表达式作为第一个参数。但是,如果那是NULL
,那么又需要它了。
注意:当使用VARCHAR()
、NVARCHAR()
或SQL服务器中的任何字符类型时,您应该总是包含一个长度说明符.默认长度因上下文而异,如果默认长度不够大,则很难找到错误。