我有一张桌子my.File_List
|id | name | position_name | format |
|1 |ONE | X | A_B_C_D_1|
|2 |TWO | Y | A_N_M_E_2|
|3 |TWO | A | X_Y_9_O_3|
我需要一个查询来替换每一行的格式数据,例如A_(position_name)_B_C_D
例如。对于id = 1
我希望格式列数据类似于A_X_B_C_D 其中X是position_name。 请建议更新查询..
答案 0 :(得分:2)
更通用的解决方案without hard coding position of '_'
select substring(format, 1, charindex('_',format)) + position_name +
substring(format, charindex('_',format),LEN(format))
--Results for first row
'A_X_B_C_D_1'
select substring(format, 1, charindex('_',format)) + position_name + '_B_C_D'
--Results for first row
'A_X_B_C_D'
更新查询;
Update File_List
Set format = substring(format, 1, charindex('_',format)) + position_name +
substring(format, charindex('_',format),LEN(format))
答案 1 :(得分:1)
A_B_C_D
到A_X_B_C_D
:
UPDATE File_List
SET format = SUBSTRING(format, 1, 2) + position_name +
'_' + SUBSTRING(format, 3, LEN(format))
A_B_C_D
到A_X_C_D
:
UPDATE File_List
SET format = SUBSTRING(format, 1, 2) + position_name +
SUBSTRING(format, 4, LEN(format))
编辑:在第一种情况下说LEN(format)-4
代替LEN(format)
会丢弃最后2个字符。
答案 2 :(得分:1)
这将为您提供所需的输出
UPDATE my.File_List
SET format = SUBSTRING(format ,1,2) + position_name + '_' + SUBSTRING(format ,3,5)
答案 3 :(得分:1)
我可以假设它始终处于相同的位置吗?
如果是这样,这样的事情会起作用:
UPDATE File_List SET format = LEFT(format,2) + position_name + '_' + SUBSTRING(format, 3, LEN(format)-4)
这样,丢弃最后2个字符,它总是在index 2中插入position_name,而不关心格式的大小。
答案 4 :(得分:1)
尝试:
SELECT
STUFF(Format, 3, 0, position_name+'_')
FROM
TableName
使用
更新UPDATE
TableName
SET Format=STUFF(Format, 3, 0, position_name+'_')