首页 > 解决方案 > SQL 字符串 - 删除两次出现之间的子字符串

问题描述

我有一些字符串,例如:

0@11001@2017@308     
0@1@2018@327          
0@200510@2020@3022

我需要删除年份值(在最后 2 个“@”之间)。所以结果应该是这样的:

0@11001@308     
0@1@327          
0@200510@3022

是否有一个简单的查询来做到这一点?

标签: sqlsql-serversql-server-2012substring

解决方案


UPDATE
  yourTable
SET
  col = STUFF(yourTable.col, AtSign2.pos, atSign3.pos - atSign2.pos, '')
FROM
  yourTable
OUTER APPLY
  (SELECT CHARINDEX('@', yourTable.col,             0)) AS atSign1(pos)
OUTER APPLY
  (SELECT CHARINDEX('@', yourTable.col, atSign1.pos+1)) AS atSign2(pos)
OUTER APPLY
  (SELECT CHARINDEX('@', yourTable.col, atSign2.pos+1)) AS atSign3(pos)

推荐阅读