我在SQL Server数据库中有以下列的表:
Field1, Field2, Field3
Field1
是一个字符串类型为“|”的列作为分隔符。
它具有以下形式:
Part1|Part2
我想编写一个返回以下列的SQL查询:
Part1, Part2, Field2, Field3
最好的方法是什么?
答案 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?,您会看到很多理由为什么这个问题的答案是绝对是的!
现在,假设您无法更改数据库结构,可以使用Left
和Right
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.', ' ');
它将通过空格分割返回所有值。