iT邦幫忙

0

MSSQL 2008R2 關於資料表邏輯問題(新手發問)


各位高手大大您好
小弟目前正在學習MSSQL的設計與管理,日前遇到了一個小問題,問題如下
這有兩個table都是地址資料,但是其中一個FittingAdd的地址欄位卻是"台北縣XX市",
現在長官要求我把舊的住址將它修改為"新北市XX區",和圖中的cusAddress欄位一樣,
長官只指提醒我一句話,是因為邏輯出了問題才導致FittingAdd沒更新,
小弟腦鈍....,小弟該如何解決這個問題??
麻煩各位不吝嗇的教導小弟,小弟必定虛心受教,
謝謝。

2
賽門
iT邦超人 1 級 ‧ 2014-11-27 13:45:45
最佳解答
<pre class="c" name="code">UPDATE fittingadd
   SET fittingadd = '新北市' + RIGHT(fittingadd, LEN(fittingadd) - 3)
 WHERE LEFT(fittingadd, 3) = '台北縣'

請你務必先備份再執行上述指令。
程式邏輯?可能是指程式中沒有連帶UPDATE fittingadd欄位內容.
導致custadd更新了,沒更新到fittingadd.

因為不是您的長官肚裏的迴蟲,只能這樣猜測了。

看更多先前的回應...收起先前的回應...

報告老師,有問題

後面的板橋「區」和淡水「區」沒改到
逃跑

話又說回來
他們家的客戶
可能也不會只侷限在新北市
噎到

賽門 iT邦超人 1 級 ‧ 2014-11-27 14:30:55 檢舉

antijava提到:
後面的板橋「區」和淡水「區」沒改到

再加一行指令...

<pre class="c" name="code">UPDATE fittingadd  
   SET fittingadd = LEFT(fittingadd, 5) + '區' + RIGHT(fittingadd, LEN(fittingadd) - 6)  
 WHERE LEFT(fittingadd, 3) = '新北市'  

同學們要會舉一反亖吶~~毆飛

但,這是硬改的方法,基本上我是建議用幸運大叔的對照表的方法。
我再想想你PO問者連基本的SQL都還不熟練,要求對照表根本強人所難。
只好....直接一點。

qhair1234 iT邦新手 5 級 ‧ 2014-11-27 15:38:23 檢舉

謝謝你的回答,對於初學者的我,這真的是一個淺顯易懂的答案!!謝謝謝謝

外獅佬 iT邦大師 1 級 ‧ 2014-11-27 17:44:05 檢舉

跟朱市長商量一下,改回台北縣就好了汗瞎毆飛

0
<pre class="c" name="code">
Update Table XXX
SET FittingAdd = cusAddress

P.S 使用前, 請在測試環境中進行, 確認後再套用, 謝謝~

看更多先前的回應...收起先前的回應...

這樣跟用一個欄位有何不同?
乾脆砍掉算了.

發問的人,也沒講清楚,到底是要怎樣作啊.
真是亂七八糟的設計與邏輯,你們到底是要把一個欄位改成跟另一個欄位一樣.還是兩個欄位裡面資料不同,但是要把 台北縣 變成 新北市,
板橋市 改成 板橋區 .

qhair1234 iT邦新手 5 級 ‧ 2014-11-27 12:24:06 檢舉

首先感謝二位大大的回答,我想我的敘述問題的方法有錯XD很抱歉沒講清楚!!
我把問題在釐清一下,如下
現在有兩個資料表分別為"客戶住址"與"安裝住址",
我必須把安裝住址(fittingadd)的格式修改成客戶住址(cusaddress),
例如:只要住址是"台北縣XX市"都要修改成"新北市XX區",

但是我不可能一筆一筆修改,因為select出來有6千多筆......,
加上長官有提示我說是關於"邏輯"的問題,所以我才發問想問問在這的資深大大們,
我長官的所說的"邏輯"到底是甚麼意思???該用甚麼方法修改呢?
謝謝!!

別理你們長官鬼扯,他也不會.就是這樣!
他要會的話,這資料就不會長這鬼樣子.
這個就是弄個台北縣改制之後的新北市的對照表,
然後根據那Table去update就好啦.

月半車甫 iT邦研究生 3 級 ‧ 2014-11-27 13:06:18 檢舉

推這個

unclelucky提到:
弄個台北縣改制之後的新北市的對照表,
然後根據那Table去update就好

qhair1234 iT邦新手 5 級 ‧ 2014-11-27 15:37:11 檢舉

謝謝各位的回答了,對小弟有非常多的幫助!!

2
sten
iT邦新手 2 級 ‧ 2014-11-27 14:11:53

unclelucky提到:
弄個台北縣改制之後的新北市的對照表,
然後根據那Table去update就好啦.

我也推這個根本解決辦法!

例如:

CREATE TABLE #CITYMAP (
CITY_OLD VARCHAR(20),
CITY_NEW VARCHAR(20)
);

INSERT INTO #CITYMAP ('台北縣板橋市','新北市板橋區');
INSERT INTO #CITYMAP ('台北縣中和市','新北市中和區');

UPDATE XXX SET FITTINGADD = B.CITY_NEW + SUBSTRING(CUSADDRESS,7,LEN(CUSADDRESS)-6)
FROM XXX AS A INNER JOIN #CITYMAP AS B ON SUBSTRING(CUSADDRESS,1,6) = CITY_OLD

這樣就可以更新了~~

qhair1234 iT邦新手 5 級 ‧ 2014-11-27 15:39:02 檢舉

謝謝你的回答,我會嘗試看看的,努力中!

0
summertw
iT邦好手 1 級 ‧ 2014-11-27 20:05:54

Update Target_Table
Set FittingAdd = REPLACE(FittingAdd, '市' , '區')
Where FittingAdd Like '台北縣'

Update Target_Table
Set FittingAdd = REPLACE(FittingAdd, '鎮' , '區')
Where FittingAdd Like '台北縣'

Update Target_Table
Set FittingAdd = REPLACE(FittingAdd, '鄉' , '區')
Where FittingAdd Like '台北縣'

Update Target_Table
Set FittingAdd = REPLACE(FittingAdd, '台北縣' , '新北市')
Where FittingAdd Like '台北縣'

-- 完成

qhair1234 iT邦新手 5 級 ‧ 2014-11-28 09:21:26 檢舉

謝謝你也提供了你的方法,讓小弟又有新的嘗試

我要發表回答

立即登入回答