首页 > 解决方案 > SQL 新手:仅将名字从全名字段导入到报表生成器(数据源查询)

问题描述

我敢肯定这可能是一个非常简单的问题,但我是 SQL 新手,我在论坛上找不到任何可以准确解决我想要完成的内容的内容,所以请耐心等待。

我在 SQL Server 报表生成器中工作。我正在设置我的数据源和查询。我正在查询的表只有一个“全名”字段,但是,在此报告中,我需要将其拆分为“名字”和“姓氏”。如果可能的话,我想直接从 Dataset->Query 部分完成所有这些操作。“全名”字段采用以下格式:SMITH, MARK ALEXANDER

有些人有多个名字,所以,在上面的例子中,“Mark Alexander”可以变成“First Name”。

我已经能够使用 PARSENAME 为姓氏工作,如下所示:

SELECT DISTINCT [Zip Code]
,PARSENAME(REPLACE([Full Name], ',', '.'), 2) AS [LastName]
FROM [SomeDB].[dbo].[T_MAIN_LIVE]

...但我无法让它为名字正常工作。我也尝试过使用 RIGHT 命令,但遇到了类似的问题。它要么切断了名字的一部分,忽略了“次要”名字,要么打印了名字,前面有一个我似乎无法摆脱的空格。例如,我能得到的最接近的是:

SELECT DISTINCT [Zip Code]
,PARSENAME(REPLACE([Full Name], ',', '.'), 1) AS [FirstName]
FROM [SomeDB].[dbo].[T_MAIN_LIVE]

...但我留下了一个前面的空间。也许我只需要事后消除前面的空格?如果是这样,我应该怎么做?

同样,我确信这对 SQL 专家来说是一个简单的解决方法,所以我为我的无知道歉。

在此先感谢,卡梅伦

标签: sqlsql-serverreportbuilder

解决方案


你可以试试这个。它对我有用。

SELECT name = 'smith, mark alexander'
INTO #name

SELECT concat(SUBSTRING(name, CHARINDEX(',', name, 1) + 1, 20), ' ', SUBSTRING(name, 1, CHARINDEX(',', name, 1) - 1))
FROM #name

编辑:这假设在所有情况下都有一个逗号分隔姓氏和名字。


推荐阅读