如何在选择查询中将多行字符串作为4个字段返回

时间:2015-02-26 12:32:22

标签: sql-server select sql-server-2008-r2

nvarchar(100)字段包含更多行的信息,因为每行都有不同的信息(不知何故,每个行号都有含义:第一行是名字,第二行是姓氏,...)我想查询该字段并将结果作为四个字段。我想使用单个select语句来执行此操作(即使在后台使用funcion或视图)。

我尝试使用charindexreplace,但我无法以一个查询结束。

以某种方式查询

select MULTILINEFIELD from TABLE 

返回:

'John
Doe
34
Male'

我想把它变成

SELECT FIRSTNAME, LASTNAME, AGE, GENDER FROM SOMETHING

在我的情况下,“换行符”是char(10) + char(13),我已经摆脱了新行: 选择

  REPLACE( REPLACE(MULTILINEFIELD , char(10), '')  , char(13), '@')
  from TABLE

给出了

John@Doe@34@Male

我使用'@'作为char,肯定我在数据库中找不到。

我希望我表达自己。

1 个答案:

答案 0 :(得分:0)

假设您的数据中没有任何句点,您可以使用PARSENAME轻松完成此操作。

declare @MultiLineField varchar(50) = 'John
Doe
34
Male';

with normalizedValues as
(
    select REPLACE( REPLACE(@MultiLineField , char(10), '')  , char(13), '.') as FullData
)

select 
    PARSENAME(FullData, 4) as FirstName
    , PARSENAME(FullData, 3) as LastName
    , PARSENAME(FullData, 2) as Age
    , PARSENAME(FullData, 1) as Sex
from normalizedValues