SQL Server 2008 R2 : Update table using pattern

标签 sql sql-server sql-server-2008-r2

我有下表,其中包含一些记录:

表:Test_One

create table Test_One
(
  Cola varchar(50)
);

插入记录:

Insert into Test_One values('1_123456');
Insert into Test_One values('123456898_121');
Insert into Test_One values('12345633_789');
Insert into Test_One values('986_12345622');
Insert into Test_One values('3457_123456221');
Insert into Test_One values('2_123456456');
Insert into Test_One values('1234567878_5674');
Insert into Test_One values('23_1234560976');
Insert into Test_One values('6_12345634234');
...
...
Millions

现在我想更新Cola列。我想从开头删除字符串部分 从结束。以 _ 结尾的起始字符串,如 1_,2_,23_,6_,3457_,986_ 想要删除并 以 _ 开头的结束字符串(如 _121,_789,_5674)不需要删除。

结果应该是:

Cola
-----------
123456
123456898
12345633
12345622
123456221
123456456
1234567878
1234560976
12345634234
...
...

最佳答案

使用CHARINDEXSUBSTRING:

SELECT
    *,
    CASE
        WHEN LEN(SUBSTRING(Cola, CHARINDEX('_', Cola) + 1, LEN(Cola) - CHARINDEX('_', Cola))) >=
                LEN(SUBSTRING(Cola, 0, CHARINDEX('_', Cola)))
            THEN SUBSTRING(Cola, CHARINDEX('_', Cola) + 1, LEN(Cola) - CHARINDEX('_', Cola))
        ELSE
            SUBSTRING(Cola, 0, CHARINDEX('_', Cola))
    END AS UpdatedCola  
FROM Test_One

关于SQL Server 2008 R2 : Update table using pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847077/

相关文章:

php使用next按钮限制查询pdo

sql-server - 如何将存储过程转换为 View ?

SQL Server Like 查询不区分大小写

sql - 在 SQL Server 2008 中连接 3 个表

sql - 这个 SQL 语句背后的含义是什么? ISNULL(状态,0) & 128 = 0?

php - 如何计算每行连接中的所有实例?

mysql - SQL 查询连接 2 个表并只显示具有匹配数据的行

mysql - (为什么?)Greatest+Coalesce 方式比使用 or 的单个选择更快

java - Hql查询优化-返回索引id或整个对象

sql-server - 将行插入表中,只有一列、主键和标识