2016-06-09 59 views
3

在我的表列替换字符串中的字符,我在下面的示例数据如何使用T-SQL

Test1 145, Area 1 
Test2 146, 
Test3 145, Area 2, Plot 10 

我想要实现的是,以取代“”字符串中,但只有当它是最后一个字符。如果我在“,”之后有更多的字符,那么替换应该保持原样。

在上面的例子中,替换将只在线路工作2.

预期出放会像下面

Test1 145, Area 1 
Test2 146 
Test3 145, Area 2, Plot 10 

在上述第2行,“”已被替换为空空间。

我试过这个Replace(column1, ', ', '') AS ColName,但是这代替了Test1和Test3中的所有“,”。

+0

所以3个系是一个单值或者是你显示3行? –

+0

@AlexK。我显示3行 – StackTrace

+4

可能重复[SQL:删除字符串中的最后一个逗号](http://stackoverflow.com/questions/31420597/sql-remove-last-comma-in-string) –

回答

1

我敢肯定IIF不可用在SQL Server 2005中。这与使用CASE的上一个答案基本相同。

declare @MyString varchar(50) 

set @MyString = 'Test2 146,' 

select 
case 
    when right(rtrim(@MyString), 1) = ',' then 
     substring(@MyString, 1, len(rtrim(@MyString)) - 1) 
    else 
     @MyString 
end 
2

你可以试试这个:

DECLARE @value VARCHAR(1024) = 'Test2 146,'; 

SELECT IIF(RIGHT(@value,1) = ',', LEFT(@value, LEN(@value) - 1), @value); 

对于列,它看起来象下面这样:

DECLARE @DataSource TABLE 
(
    [value] VARCHAR(1024) 
); 

INSERT INTO @DataSource ([value]) 
VALUES ('Test1 145, Area 1') 
     ,('Test2 146,') 
     ,('Test3 145, Area 2, Plot 10'); 


SELECT IIF(RIGHT([value],1) = ',', LEFT([value], LEN([value]) - 1), [value]) 
FROM @DataSource; 
+0

看起来像'IIF'仅在2012年有效+ – StackTrace

+0

您可以使用'CASE'语句 - 检查下面的答案。 – gotqn

0

事情是这样的:

SELECT CASE 
      WHEN Column1 LIKE '%,' THEN STUFF(column1, LEN(column1), 1, '') 
      ELSE Column1 
     END 
2

你也可以做,这将LIKEIIF

SELECT IIF(t.Column LIKE '%,' , LEFT(t.column, LEN(t.column) - 1) , t.column) as new_val 
FROM YourTable t 

对于旧版本:您可以使用CASE EXPRESSION因为IIF只是因为2012+版本(由@gotqn链接)

SELECT CASE WHEN t.Column LIKE '%,' 
      THEN LEFT(t.column, LEN(t.column) - 1) 
      ELSE t.column 
     END as new_val 
FROM YourTable t 
+0

当然,我也只是注意到这是2005年的标签,所以不适用于OP。但它对未来在这里绊倒的其他人会有效。 –

+0

'IIF'不起作用,但情况不会吗?或者另一个功能在这个版本中不可用? – sagi

+1

'CASE'确定 - IIF从2012+版本(https://msdn.microsoft.com/en-us/library/hh213574.aspx) – gotqn

0

这显示了一种方法它。

DECLARE @test VARCHAR(30); 

SET @test = 'Test1, 145, Area 1'; 

SELECT @test; 

IF CHARINDEX(',', @test, LEN(RTRIM(@test))) > 0 
BEGIN 
    SET @test = Replace(@test, ',', ''); 
END 

SELECT @test; 

SET @test = 'Test2 146,'; 

SELECT @test; 

IF CHARINDEX(',', @test, LEN(RTRIM(@test))) > 0 
BEGIN 
    SET @test = Replace(@test, ',', ''); 
END 

SELECT @test; 

SET @test = 'Test3 145, Area 2, Plot 10'; 

SELECT @test; 

IF CHARINDEX(',', @test, LEN(RTRIM(@test))) > 0 
BEGIN 
    SET @test = Replace(@test, ',', ''); 
END 

SELECT @test; 

- 如何工作到一个SELECT语句

SET @test = 'Test2 146,'; 

SELECT CASE WHEN CHARINDEX(',', @test, LEN(RTRIM(@test))) > 0 THEN SUBSTRING(@test, 1, LEN(@test) - 1) ELSE @test END AS 'Converted Value';