2016-06-09 60 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';