如何使用T-SQL替换字符串中的字符

时间:2016-06-09 13:03:21

标签: sql-server tsql sql-server-2005

在我的表格列中,我有以下示例数据

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中的所有“,”。

5 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

这样的事情:

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

答案 4 :(得分: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';