【问题标题】:How to return a multiline string as 4 fields in a select query如何在选择查询中将多行字符串作为 4 个字段返回
【发布时间】:2015-04-28 20:06:06
【问题描述】:

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

我尝试使用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

我使用 '@' 作为一个字符,我肯定不会在数据库中找到它。

我希望我表达了自己。

【问题讨论】:

  • 之后可以使用split函数用分隔符“@”进行分割。就这样。
  • 你是指自己拆分还是使用特定的split函数?
  • 大多数拆分函数返回一个每个值一行的表; OP 想要每个值一列。用户,请发布您尝试的 charindex 查询以及从中获得的任何错误或不正确的值。正确使用 CHARINDEX 和 SUBSTRING 可以得到你想要的结果。

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


【解决方案1】:

假设您的数据中没有任何句点,您可以使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2021-07-27
    • 2022-09-16
    • 1970-01-01
    相关资源
    最近更新 更多