表中的UPDATE列

时间:2013-01-03 10:34:28

标签: sql sql-server-2008

我有一张桌子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。 请建议更新查询..

5 个答案:

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

UPDATE File_List
SET format = SUBSTRING(format, 1, 2) + position_name +
             '_' + SUBSTRING(format, 3, LEN(format))

A_B_C_DA_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+'_')