【发布时间】:2021-11-09 15:37:34
【问题描述】:
所以我有一列包含多个不同的字符串。如果字符串包含 _,则必须在该字符上进行拆分。对于我使用的其他人,我会使用单独的规则,例如:如果它以 4FH、GWO、CTW 开头并且没有 _,那么它必须在 3 个字符后拆分。如果它以 4 开头并且没有 _.. 等。
Example
|Source |
|EC_HKT |
|4FHHTK |
|ABC_GJE |
|4SHARED |
|ETK_ETK-40|
etc..
我想要的结果是
|Source|Instance|
|EC |HKT |
|4FH |HTK |
|ABC |GJE |
|4 |SHARED |
|ETK |40 |
一开始我第一次尝试
SELECT
LEFT(lr.Source, CHARINDEX('_',lr.Source)) AS Source,
RIGHT(lr.Source, LEN(lr.Source) - CHARINDEX('_', lr.Source)) AS Interface,
但这只有在所有结果都有 _ 时才有效。任何提示或想法? CASE WHEN THEN 会起作用吗?
【问题讨论】:
-
请解释一下你分割字符串的规则。不明显。
-
我把它加进去了。
-
这些是任意文本和规则,您几乎需要一个映射来执行此操作,因此几乎需要手动进行拆分。您可以使用简单的规则开始构建所述映射,但最终,这不会以简单的转换结束。 (例如,10SHARED 是映射到 10 和 SHARED 还是 1 和 0SHARED?ABC_ABC-GJE 是映射到 ABC 和 GJE 还是 ABC 和 ABC-GJE?为什么?
-
这太武断了,无法应用任何常见的逻辑。我将创建一个函数来实现您的规则并计算要拆分的字符位置,然后您可以使用它将字符串分成两半。
-
如果它以 4FH 开头,它也以 4 开头,那么你怎么知道是在 4 之后还是在 4FH 之后拆分?
标签: sql sql-server split delimiter