sql trim并替换

时间:2015-09-21 13:30:43

标签: sql sql-server-2008 sql-server-2012

我可以同时修剪和替换一个列的名称,这样我可以将它分成两部分吗?预期结果在nameL和nameR

name        nameL    nameR
AB_1X       AB       1X
AXG_3X      AXG      3X
4G_12X      4G       12X

尝试使用此查询:

select *,
RIGHT(name, LEN(name)-4) as nameR,
LEFT(name, LEN(name)-4) as nameL
from myTable

问题在于它修剪如下:

nameL    
AB_
AXG
4G_

同样适用于nameR,因为我采用的是固定大小。如何消除“_”并实现预期结果? 提前谢谢

2 个答案:

答案 0 :(得分:3)

尝试结合substringcharindex函数:

DECLARE @t TABLE(name NVARCHAR(10))

INSERT INTO @t VALUES
('AB_1X'),
('AXG_3X'),
('4G_12X')

SELECT name, 
       SUBSTRING(name, 1, CHARINDEX('_', name) - 1) nameL,
       SUBSTRING(name, CHARINDEX('_', name) + 1, LEN(name)) nameR
FROM @t

我假设name列中始终有下划线符号。

答案 1 :(得分:2)

您可以使用:

SELECT RIGHT(name, LEN(name) - CHARINDEX('_', name)) AS nameR,
    LEFT(name, CHARINDEX('_', name) - 1) AS nameL
FROM myTable