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 の場合

X が position_name である A_X_B_C_D のような形式の列データが必要です。更新クエリを提案してください..

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

常に同じ位置にあると仮定できますか?

その場合、次のようなものが機能します。

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

このようにして、最後の 2 文字を破棄し、position_name を常にインデックス 2 に挿入し、フォーマットのサイズを気にしません。

于 2013-01-03T10:46:32.753 に答える
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_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 文字が破棄されます。

于 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 に答える