如何在SQL中将数字键拆分为最多各4位的两列?
拆分数字键为Split1和Split2列的实现方法
根据需求,将LeadKey字段拆分为两列:Split2取数字最后4位(不足4位则为空),剩余部分放入Split1(4位数字时Split1为空,不足4位时Split1为原数字),以下提供两种常用场景的实现方案:
一、SQL数据源端处理(推荐,提前处理减少SSAS计算压力)
方法1:字符串处理法(直观,适合所有数字长度)
通过将数字转为字符串,判断长度后截取对应部分:
SELECT LeadKey, -- Split1:截取除最后4位外的部分,不足4位返回原数,4位返回空 CASE WHEN LEN(CAST(LeadKey AS VARCHAR)) > 4 THEN LEFT(CAST(LeadKey AS VARCHAR), LEN(CAST(LeadKey AS VARCHAR)) - 4) WHEN LEN(CAST(LeadKey AS VARCHAR)) < 4 THEN LeadKey ELSE NULL END AS Split1, -- Split2:截取最后4位,不足4位返回空 CASE WHEN LEN(CAST(LeadKey AS VARCHAR)) >= 4 THEN RIGHT(CAST(LeadKey AS VARCHAR), 4) ELSE NULL END AS Split2 FROM YourTable;
方法2:数学运算处理法(性能更优,仅适用于整数类型)
利用整数除法和取模运算直接计算,无需字符串转换:
SELECT LeadKey, -- Split1:去掉最后4位的整数部分,不足4位返回原数,4位返回空 CASE WHEN LeadKey >= 10000 THEN FLOOR(LeadKey / 10000) WHEN LeadKey < 1000 THEN LeadKey ELSE NULL END AS Split1, -- Split2:取最后4位,不足4位返回空 CASE WHEN LeadKey >= 1000 THEN LeadKey % 10000 ELSE NULL END AS Split2 FROM YourTable;
二、SSAS模型内创建计算列
如果需要在SSAS Tabular模型中直接生成拆分列,可使用DAX表达式创建计算列:
Split1计算列
Split1 = VAR LeadLen = LEN(INT(LeadKey)) RETURN IF(LeadLen > 4, LEFT(LeadKey, LeadLen - 4), IF(LeadLen < 4, LeadKey, BLANK()))
Split2计算列
Split2 = VAR LeadLen = LEN(INT(LeadKey)) RETURN IF(LeadLen >= 4, RIGHT(LeadKey, 4), BLANK())
内容的提问来源于stack exchange,提问作者Jess8766
相关产品推荐
相关产品推荐

