【发布时间】:2019-07-31 16:46:47
【问题描述】:
我有一列包含诸如
之类的值Column
Asset|Class1|Category1|Group1|Account1
Expense|Class23|Category23|Group23|Account23
我想选择我的管道分隔符第 3 次和第 4 次出现之间的字符串,我该如何实现?
我尝试了 PARSENAME 和 charindex+stuff 函数,但它们有限制,例如最多 128 个字符。此外,我们的 SQL 服务器对正则表达式的支持有限。有什么想法吗?
SELECT REVERSE(PARSENAME(REVERSE(replace(LTRIM(Column), '|', '.')), 3))
我的选择需要返回: 第 1 组 第 23 组
【问题讨论】:
-
不能在导入的时候修复数据,让它分到多列吗?
-
是否可以修复设计并将这些值放在不同的列中?这是处理这个问题的最佳方式。
-
什么版本的 SQL?如果是 2017 年,您可以只使用拆分字符串:docs.microsoft.com/en-us/sql/t-sql/functions/… 或创建您自己的函数版本。 stackoverflow.com/questions/6619810/…
-
有大量的拆分字符串函数返回元素编号,允许您交叉应用字符串列,然后仅选择第三项,例如。
标签: sql sql-server regex substring charindex