Sql 字符串中包含字符串的concat列名
我试图创建一个漂亮的列来显示,但我无法获得一个空格或连字符来工作。我希望列显示为 2014年6月或2014年6月,但由于查询已经在字符串中,因此尝试以正常方式插入时会出现错误 以下是我遇到的问题:Sql 字符串中包含字符串的concat列名,sql,sql-server-2005,concatenation,Sql,Sql Server 2005,Concatenation,我试图创建一个漂亮的列来显示,但我无法获得一个空格或连字符来工作。我希望列显示为 2014年6月或2014年6月,但由于查询已经在字符串中,因此尝试以正常方式插入时会出现错误 以下是我遇到的问题: (LEFT(DATENAME(month, leadtime),3) + " " + CONVERT(varchar, DATEPART(year, leadtime))) as leadmonth 以下是上下文查询的其余部分: set @query = 'SELECT name AS "Lead
(LEFT(DATENAME(month, leadtime),3) + " " + CONVERT(varchar, DATEPART(year, leadtime))) as leadmonth
以下是上下文查询的其余部分:
set @query = 'SELECT name AS "Lead Source",' + @cols + '
from
(
SELECT d.name, COUNT(u.lead_source_id) AS totalLeads, + "["+ (LEFT(DATENAME(month, leadtime),3) + " " + CONVERT(varchar, DATEPART(year, leadtime)))+"] as leadmonth" +
FROM DI_TrackingDB.dbo.userleads u
INNER JOIN GSPremiumServices.dbo.supplier_product_lead_source_def d ON d.lead_source_id = u.lead_source_id
WHERE vend_id = 355135
AND u.lead_source_id IS NOT NULL
GROUP BY u.lead_source_id, d.name, DATENAME(month, leadtime), DATEPART(year, leadtime), Convert(varchar(7), leadtime, 126)
) x
pivot
(
max(totalLeads)
for leadmonth in (' + @cols + ')
) p '
请记住,我正在设置@query
,所以我已经在一个字符串中了。
任何建议都将不胜感激。只需在正在构建的字段名周围放上方括号,如下所示:
"[" + (LEFT(DATENAME(month, leadtime),3) + " " + CONVERT(varchar, DATEPART(year, leadtime))) + "] as leadmonth"
我还准备好处理可能出现的任何单引号或双引号(在构建字符串时根据需要对它们进行转义)。除此之外,将字段名括在方括号中允许您使用标识符名称中通常不允许使用的字符。答案非常简单。不确定人们是否不太理解我最初的问题,但答案是在内部字符串的两侧使用两个
“
。下面是代码的最终版本
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(monthyear)
FROM (SELECT DISTINCT (LEFT(DATENAME(MONTH, month_start),3)+ '-' + CONVERT(VARCHAR, DATEPART(YEAR, month_start))) AS monthyear, month_start
FROM dbo.mo_vendor_month WITH(NOLOCK)
WHERE vend_id = #arguments.prospectId#
AND month_start >= '#startDate#'
)alertsMonths
ORDER BY month_start ASC
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT ' + @cols + '
FROM
(
SELECT total_unique_leads,(LEFT(DATENAME(MONTH, month_start),3)+ ''-'' + CONVERT(VARCHAR, DATEPART(YEAR, month_start))) AS monthyear
FROM dbo.mo_vendor_month
WHERE vend_id = #arguments.prospectId#
AND month_start >= ''#startDate#''
GROUP BY month_start, total_unique_leads
) x
pivot
(
max(total_unique_leads)
FOR monthyear IN (' + @cols + ')
) p '
EXECUTE(@query)
如果我不在一根绳子里,这似乎就可以自己起作用了。但将其添加到完整查询中会导致
关键字附近的语法不正确,我编辑了上面的帖子以反映这一变化。与其执行@query
,不如打印它,并将生成的消息复制到一个新窗口,并查看以确保字符串转义正确-很可能是您的引号引起的。。。当我们在一个字符串中插入一个字符串时,我们都会发生这种情况。并使用两个“非a”。