1

我有一个表 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。请提出更新查询..

4

5 回答 5

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))
于 2013-01-03T10:52:14.927 回答
1

尝试:

SELECT 
  STUFF(Format, 3, 0, position_name+'_')
FROM 
  TableName

使用更新

UPDATE 
  TableName 
SET Format=STUFF(Format, 3, 0, position_name+'_')
于 2013-01-03T10:54:24.653 回答
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 个字符。

于 2013-01-03T10:45:02.597 回答
1

这将为您提供所需的输出

UPDATE  my.File_List 
SET format = SUBSTRING(format  ,1,2) + position_name + '_' + SUBSTRING(format ,3,5)
于 2013-01-03T10:45:12.550 回答
1

我可以假设它总是处于相同的位置吗?

如果是这样,这样的工作:

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

这样,丢弃最后 2 个字符,它总是在索引 2 中插入 position_name,并且不关心格式的大小。

于 2013-01-03T10:46:32.753 回答