替换两列

时间:2018-01-08 12:30:23

标签: sql sql-server

我想知道更换一些数字的最有效和最安全的方法。在我的表中,我有两列: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

希望这很清楚。

3 个答案:

答案 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