我有一些字符串:
0@11001@2017@308
0@1@2018@327
0@200510@2020@3022
我需要删除年份值(在最后2'@'之间)。所以结果应该是这样的:
0@11001@308
0@1@327
0@200510@3022
有一个简单的查询吗?
这里最好的做法是规范化您的数据,并停止在单个列中存储嵌入在单个字符串中的多个数据点。话虽这么说,如果你必须继续,我们可以尝试使用基本字符串函数将更新拼接在一起:
UPDATE yourTable
SET col = LEFT(col, CHARINDEX('@', col, CHARINDEX('@', col) + 1)) +
REVERSE(LEFT(REVERSE(col), CHARINDEX('@', REVERSE(col)) - 1));
请注意,这个答案假定每个记录中都有三个@
分隔符。如果没有,那么我们将不得不添加额外的逻辑。
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)
DECLARE @STRING VARCHAR(50) = '0@200510@2020@3022'
DECLARE @NEED_TO_REMOVE VARCHAR(50) = PARSENAME(REPLACE(@STRING,'@','.'),2) + '@'
SELECT REPLACE(@STRING,@NEED_TO_REMOVE,'') --result: 0@200510@3022