SQL Server中用IIF实现Lot字段按短横线截断或返回原字段
解决SQL Server中Lot字段的条件截断问题
可以用IIF函数结合CHARINDEX和SUBSTRING实现需求,正确写法如下:
SELECT IIF( CHARINDEX('-', dbo.Material_Trans.Lot) > 0, SUBSTRING(dbo.Material_Trans.Lot, 1, CHARINDEX('-', dbo.Material_Trans.Lot) - 1), dbo.Material_Trans.Lot ) AS ProcessedLot FROM dbo.Material_Trans;
关键点说明:
CHARINDEX('-', Lot)找不到短横线时会返回0,所以用> 0作为判断条件,精准识别包含短横线的字段- 原语句里
SUBSTRING用0作为起始位置,SQL Server会自动转为1,但显式写1更符合语法规范 - 截断时要把
CHARINDEX的结果减1,这样刚好取到短横线左侧的所有字符(不减1的话会把短横线本身也包含进去)
更简洁的替代写法
用LEFT函数可以简化截断逻辑,效果完全一致:
SELECT IIF( CHARINDEX('-', dbo.Material_Trans.Lot) > 0, LEFT(dbo.Material_Trans.Lot, CHARINDEX('-', dbo.Material_Trans.Lot) - 1), dbo.Material_Trans.Lot ) AS ProcessedLot FROM dbo.Material_Trans;
内容的提问来源于stack exchange,提问作者RickWN
相关产品推荐
相关产品推荐

