2013-04-26 137 views
4

我是相當新的SQL,我嘗試做以下操作:更新部分

我有一列數據,我們將其稱之爲CATEGORY,該列中的數據如下:

插孔,鰓,撬,吉爾,傑克,保羅,約翰尼,是良好的,平紋呢,塞米, 約翰

在第二表我有一個映射的條目

列1 Johnny, be, good - 列2 johnny be good

我需要能夠爲Johnny, be, good該類別中的值更新爲johnny be good,但列的只是一部分。我已經試了好東西,下面是我的嘗試之一:

這裏只是想選擇,出現這種情況

SELECT * FROM [dbo].[TD_DTV_BV_CATALOGITEMS] a 
INNER JOIN 
[dbo].[TD_CATEGORYMAP] b ON 
a.[COURSE_CATEGORY] LIKE b.[GROUPCATEGORY] 

這裏是行,我試圖更新列,當然這是無效。

UPDATE [dbo].[TD_DTV_BV_CATALOGITEMS] a 
SET a.COURSE_CATEGORY = REPLACE(a.COURSE_CATEGORY, b.MAPCATEGORY) 
INNER JOIN 
[dbo].[TD_CATEGORYMAP] b ON 
a.[COURSE_CATEGORY] LIKE b.[GROUPCATEGORY] 

在此先感謝您的幫助。

+0

'替換()'需要3個參數。 '替換(source_text,text_to_find,replacement_text)'。除非你正在嘗試進行部分字符串替換,爲什麼不只是'SET a.COURSE_CATEGORY = b.MAPCATEGORY'呢? – 2013-04-26 20:38:46

+0

@Marc,OP明確表示他想做部分替換。 – 2013-04-26 20:39:46

+1

對不起,你會在一個**單**列中出現'jack,gill,tommy,jill,jacky,paul,johnny,be,good,tammy,sammy,john'如果是的話,停止你在做什麼,並閱讀關於數據庫規範化。 – Kermit 2013-04-26 20:41:06

回答

0

假設你是MSSQL,試試這個

SQL Fiddle

MS SQL Server 2008的架構設置

create table t ( 
    id int not null identity(1, 1), 
    category varchar(max) 
) 

create table map (
    col1 varchar(max), col2 varchar(max) 
) 

insert t (category) 
values ('jack, gill, tommy, jill, jacky, paul, Johnny, be, good, tammy, sammy, john'), 
    ('jack, gill, tommy, jill, jacky, paul, Johnny, be, good'), 
    ('Johnny, be, good, tammy, sammy, john') 

insert map (col1, col2) 
values ('Johnny, be, good', 'johnny be good') 

查詢1

update t set 
    category = replace(category, m.col1, m.col2) 
from t 
    join map m on t.category like m.col1 + '%' --in the begining 
    or t.category like '%, ' + m.col1 + ',%' --in the middle 
    or t.category like '%, ' + m.col1  --in the end 

select * from t 

Results

| ID |                 CATEGORY | 
--------------------------------------------------------------------------------- 
| 1 | jack, gill, tommy, jill, jacky, paul, johnny be good, tammy, sammy, john | 
| 2 |      jack, gill, tommy, jill, jacky, paul, johnny be good | 
| 3 |          johnny be good, tammy, sammy, john | 
+0

感謝所有偉大的回覆。這就是我最終希望它能幫助未來的人: \t \t UPDATE \t \t \t [dbo]。[TD_DTV_BV_CATALOGITEMS] \t \t SET \t \t \t [COURSE_CATEGORY] = REPLACE([COURSE_CATEGORY],[GROUPCATEGORY],[MAPCATEGORY]) \t \t FROM \t \t \t [DBO]。[TD_DTV_BV_CATALOGITEMS],[DBO]。[ TD_CATEGORYMAP] \t \t WHERE \t \t \t [COURSE_CATEGORY] LIKE '%' + [DBO]。[TD_CATEGORYMAP] [GROUPCATEGORY] + '%' – 2013-04-30 13:22:58