我想知道更换一些数字的最有效和最安全的方法。在我的表中,我有两列:Nummer and Vater
。在Nummer
列中,我存储文章编号。结尾为.1
的人是&{39; main
'文章和休息是他的combinations
(有时主要文章不包含组合)。数字由3个部分组成,由 3个点(总是)分隔。对所有人来说,Vater总是主要的文章编号,如下所示:
Nummer | Vater
-------------------------------
003.10TT032.1 | 003.10TT032.1
003.10TT032.2L | 003.10TT032.1
003.10TT032.UY | 003.10TT032.1
Nummer column = varchar
Vater column = varchar
我希望有可能更改前两部分n.n
例如我想说并通过sql查询发送我要替换为:9.4R53
因此,根据我们的例子,最终结果应如下:
Nummer | Vater
----------------------
9.4R53.1 | 9.4R53.1
9.4R53.2L | 9.4R53.1
9.4R53.UY | 9.4R53.1
希望这很清楚。
答案 0 :(得分:1)
试试这个
session_destroy()
我的结果
DECLARE @MysTR VARCHAR(50) = '003.10TT032.1'
DECLARE @RepStr VARCHAR(50) = '9.4R53'
SELECT
MyStr = @MysTR,
FinalStr = @RepStr+REVERSE(SUBSTRING(
REVERSE(@MysTR),
1,
CHARINDEX('.',REVERSE(@MysTR))
))
答案 1 :(得分:1)
请尝试此
DECLARE @Replace VARCHAR(50) = '9.4R53'
SELECT CONCAT(@Replace,SUBSTRING(Nummer,CHARINDEX('.',Nummer,5),1000)) Nummer
,CONCAT(@Replace,SUBSTRING(Vater,CHARINDEX('.',Vater,5),1000)) Vater
FROM REplaces
<强>输出强>
Nummer Vater
------------------------------ ---------------
9.4R53.1 9.4R53.1
9.4R53.2L 9.4R53.1
9.4R53.UY 9.4R53.1
(3 rows affected)
答案 2 :(得分:0)
正如您所提到的,您的格式已修复,您可以使用PARSENAME
来实现您的期望:
示例数据:
DECLARE @TestTable TABLE (Nummer VARCHAR (100), Vater VARCHAR (100))
INSERT INTO @TestTable (Nummer, Vater)
SELECT '003.10TT032.1', '003.10TT032.1' UNION
SELECT '003.10TT032.2L', '003.10TT032.1' UNION
SELECT '003.10TT032.UY', '003.10TT032.1';
DECLARE @TextToBeReplaced AS VARCHAR (100) = '9.4R53.';
SELECT @TextToBeReplaced + PARSENAME(Nummer, 1) AS Nummer,
@TextToBeReplaced + PARSENAME(Vater, 1) AS Vater
FROM @TestTable
结果:
Nummer | Vater
-----------------------
9.4R53.1 | 9.4R53.1
9.4R53.2L | 9.4R53.1
9.4R53.UY | 9.4R53.1