【发布时间】:2018-12-08 00:16:42
【问题描述】:
我有一列包含由正斜杠分隔的三组数据,就像这样
AB/1234/10
每一行中的列格式始终相同,包含 2 个字符、一个斜线、一些字符、一个斜线,然后是另外 2 个字符。我需要将这一列分成三列。所以上面的例子就变成了
Column1 Column2 Column3
AB 1234 10
我不太确定该怎么做。我一直在使用SELECT SUBSTRING,但这并不能满足我的需求。
select SUBSTRING(MyColumn, 1, CHARINDEX('/', MyColumn, 1)-1)
FROM MyTable
将返回AB,这很好。但我不知道如何抓住中间部分和末端部分。我以为
select SUBSTRING(MyColumn, 4, CHARINDEX('/', MyColumn, 4))
FROM MyTable
可以抓住中间,但它返回1234/10
我希望我的问题很清楚,如果有任何建议可以为我指明正确的方向,我将不胜感激,谢谢。
【问题讨论】:
-
理想情况下,此练习的一部分应该是永久分离这些数据。像这样存储多个元素违反了 1NF,并且使用起来非常痛苦。
-
如果您在建议的副本中使用拆分器,您应该避免接受的答案,因为它是拆分字符串的一种糟糕方式。而是向下滚动到 Aaron Bertrand 的答案。它的性能要好得多。
标签: sql sql-server tsql sql-server-2012