我正在定期(每月)导入大量数据。在转换过程中,我将一个字符串拆分为多个列,但这不仅仅是一个简单的拆分。有一点逻辑可以决定字符串的哪个部分进入哪个字段。
我编写了一个内联函数,它将字符串分成多个部分,并为您提供指定索引处的值。
参数是:
- 字符串值
- 分隔符
- 指数
例如:
如果字符串值是X4-728Z5-121-84gff
并且您希望函数为您提供 121,那么您可以像这样调用该函数:
fn_MyFunc('X4-728Z5-121-84gff', '-', 3)
我的问题是这样的:
在我的导入查询中,特定字段值所需的索引取决于另一个索引处的值。如果索引 1 处的值 =X4
那么我想要索引 3,否则索引 4。
在单个查询中,我调用此函数 4 或 5 次,具体取决于某些 case 语句的结果。
该功能基本上一遍又一遍地做同样的事情......但每次,我都会得到不同的索引。如何减少工作量,使得拆分字符串的辛苦工作只完成一次,并且在同一个查询中,我可以轻松获得不同的索引?
请记住,这是在从外部源导入数据的过程中,任何建议标准化或索引视图等的答案都无济于事。
编辑
我被要求发布我的查询:
SELECT
ComplexString,
CAST(fn_MyFunc(ComplexString, '-', 1) AS NVARCHAR(2)) AS LocationCode,
CAST(fn_MyFunc(ComplexString, '-', 2) AS NVARCHAR(25)) AS CompanyCode,
NULLIF(CASE
WHEN fn_MyFunc(ComplexString, '-', 1) = 'R1' THEN NULL
ELSE CAST(fn_MyFunc(ComplexString, '-', 3) AS INT)
END, 0) AS ManagementType,
CASE
WHEN fn_MyFunc(ComplexString, '-', 1) = 'R1' THEN CAST(fn_MyFunc(ComplexString, '-', 3) AS VARCHAR(25))
ELSE CAST(fn_MyFunc(ComplexString, '-', 4) AS NVARCHAR(25))
END AS Network,
.
.
.
FROM MyTable