如何根据分隔符将字符串拆分为2个部分?

时间:2017-02-27 06:37:14

标签: sql sql-server sql-server-2012

我在SQL Server数据库中有以下列的表:

Field1, Field2, Field3

Field1是一个字符串类型为“|”的列作为分隔符。

它具有以下形式:

Part1|Part2

我想编写一个返回以下列的SQL查询:

Part1, Part2, Field2, Field3

最好的方法是什么?

4 个答案:

答案 0 :(得分:1)

此处的一个选项是利用SQL Server的基本字符串函数- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; } SUBSTRING()CHARINDEX()的两个部分拆分为管道符。

Field1

答案 1 :(得分:0)

让我先说一下我完全同意Marc_s的评论 - 永远不要在一个列中存储多个值。
有关详细信息,请参阅Is storing a delimited list in a database column really that bad?,您会看到很多理由为什么这个问题的答案是绝对是的!

现在,假设您无法更改数据库结构,可以使用LeftRight charIndex

来实现此方法。

创建并填充样本表(在将来的问题中保存此步骤)

DECLARE @T AS TABLE
( 
    Col varchar(10)
)

INSERT INTO @T VALUES 
('a|b'),
('ab|cd'),
('abc|def'),
('abcd|efgh'),
('abcde|fghi')

查询:

SELECT  Col,
        LEFT(Col, CHARINDEX('|', Col)-1) As Part1,
        RIGHT(Col, LEN(Col) - CHARINDEX('|', Col)) As Part2
FROM @T

结果:

Col             Part1   Part2
a|b             a       b
ab|cd           ab      cd
abc|def         abc     def
abcd|efgh       abcd    efgh
abcde|fghi      abcde   fghi

答案 2 :(得分:0)

这种方法的优点(除了简短之外)是,如果管道丢失,它不会失败。

SELECT
  SUBSTRING(Field1, 0, charindex('|',Field1)) Part1,
  STUFF(Field1,1,charindex('|',Field1),'') Part2,
  Field2,
  Field3
FROM (values('abc|def','val2','val3')) x(Field1, field2, Field3)

答案 3 :(得分:0)

这是一个简单的函数,可用于在DB中拆分字符串:

SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');

它将通过空格分割返回所有值。