T-SQL中如何组合Left与Replace函数生成无横杠的ContractID?
解决T-SQL中LEFT与REPLACE函数嵌套生成ContractID的问题
错误分析
你之前的两段代码存在逻辑或语法问题:
- 第一段代码
REPLACE(LEFT(Subscriber_Id, 3), Subscriber_Id, '-')的参数完全错误:REPLACE的语法是REPLACE(输入字符串, 要替换的子串, 替换后的内容),你把「要替换的子串」和「替换后的内容」写反了,且用完整的Subscriber_Id去匹配前3位的内容,根本无法触发替换,所以达不到预期效果。 - 第二段代码分开使用函数时能生成列,但嵌套报错大概率是语法错误(比如括号不匹配、函数名拼写错误),并非两个函数本身不能协同工作。
正确嵌套写法
根据你的需求(同时使用LEFT和REPLACE去除横杠生成ContractID),分两种常见场景给出正确代码:
场景1:先取Subscriber_Id前3位,再去除这3位中的横杠
SELECT DISTINCT Subscriber_Id, REPLACE(LEFT(Subscriber_Id, 3), '-', '') AS ContractID FROM EDW_ODS.dbo.ODS_LABCORP_LABS WHERE ContractId IS NULL
场景2:先去除Subscriber_Id中所有横杠,再取处理后的字符串前3位
SELECT DISTINCT Subscriber_Id, LEFT(REPLACE(Subscriber_Id, '-', ''), 3) AS ContractID FROM EDW_ODS.dbo.ODS_LABCORP_LABS WHERE ContractId IS NULL
这两种写法都严格同时使用了LEFT和REPLACE函数,且能正确去除横杠生成目标ContractID,根据你的实际业务需求选择即可。
内容的提问来源于stack exchange,提问作者Wesley Prewitt
相关产品推荐
相关产品推荐

