如何使用SUBSTRING截取汽车型号,去除逗号后的颜色信息?
解决方案
要提取仅包含型号的内容,核心是处理两种情况:字段包含逗号(带颜色)和不包含逗号(无颜色)。需要先定位第一个空格的位置(区分品牌与型号),再定位第一个逗号的位置(区分型号与颜色),最终精准截取目标内容。
方案1:CASE语句兼容通用SQL Server版本
SELECT DISTINCT SUBSTRING( auto, CHARINDEX(' ', auto) + 1, CASE WHEN CHARINDEX(',', auto) > 0 THEN CHARINDEX(',', auto) - CHARINDEX(' ', auto) - 1 ELSE LEN(auto) - CHARINDEX(' ', auto) END ) AS model FROM cars
方案2:IIF简化语法(SQL Server 2012及以上版本)
如果你的SQL Server版本支持IIF函数,可用更简洁的写法:
SELECT DISTINCT SUBSTRING( auto, CHARINDEX(' ', auto) + 1, IIF(CHARINDEX(',', auto) > 0, CHARINDEX(',', auto) - CHARINDEX(' ', auto) - 1, LEN(auto) - CHARINDEX(' ', auto)) ) AS model FROM cars
方案3:分步截取(逻辑更直观)
先提取第一个空格后的所有内容,再去除逗号及后续部分:
SELECT DISTINCT LEFT( SUBSTRING(auto, CHARINDEX(' ', auto) + 1, LEN(auto)), IIF(CHARINDEX(',', SUBSTRING(auto, CHARINDEX(' ', auto) + 1, LEN(auto))) > 0, CHARINDEX(',', SUBSTRING(auto, CHARINDEX(' ', auto) + 1, LEN(auto))) - 1, LEN(SUBSTRING(auto, CHARINDEX(' ', auto) + 1, LEN(auto))) ) ) AS model FROM cars
结果验证
执行任意上述SQL后,将得到符合预期的结果:
| model |
|---|
| Vesta |
| F80 |
| Elantra |
内容的提问来源于stack exchange,提问作者xflx
相关产品推荐
相关产品推荐

