各位先進
想請問一個SQL問題

小弟先說明一下狀況

小弟有資料當初廠商設計時年份欄位只留一位, 後面用月及流水號表示
而今年已到09年..即資料內單號代碼開頭為9
例
901003

年 月 流水號
9 01 003

小弟看過資料表設計是可以容許有8個數字
先姑且不管前端程式能不能跑
照資料庫應可以直接前面補0

所以小弟想請問SQL語法高手們
如何下SQL指令讓它從 901003 變成 0901003
意即整串單號欄位前面多加一碼0
該資料庫名稱為 SALE 該欄位代碼為 ODR_NM

還有一個是前面還多一個英文字的
F90010
一樣問題
如何將 F90010 在F後補0 變成 F090010
該欄位代碼為 OUT_NM

有勞高手們
在此先謝過
minyoung wrote:
各位先進想請問一個S...(恕刪)


應該不是把資料欄位補0那麼簡單,
光是多個資料表參照到這個資料欄位問題,
要修全都要修,整體不光只是補0的問題而已
試試這個吧
SELECT REPLICATE(’0′, 10 - DATALENGTH(col1)) + col1 AS NAME
FROM PADTEST
GO

NAME
———
00DECIPHER
000000INFO
0000000SYS

For RPAD, we have to use following syntax.

SELECT col1 + REPLICATE(’0′, 10 - DATALENGTH(col1)) AS NAME
FROM PADTEST
GO

NAME
———-
DECIPHER00
INFO000000
SYS0000000


這個是MS SQL Server用的方式, 不知道你用的是哪家資料庫
2樓大大..
小弟知道您的意思
所以有說到先不管前端

小弟應該是要說先不管其他因素
還是感謝善盡告知
----------------------------------------------------------------------------
3樓大大先跟您說聲謝謝
應該是SQL SERVER
不過可以再麻煩您用我的資料表及欄位名稱述說一遍嗎
小弟先前是有用過..不過都只是查詢
也是之前有人寫給小弟照本宣科
本身不是很懂SQL
所以~~
不好意思~~
有勞了~
抱歉,在下不才,只會簡單的。

SALE是資料庫還是資料表的名稱,若是後者,
第一個語法:
UPDATE SALE
SET ODR_NM='0' + ODR_NM

第二個語法:
UPDATE SALE
SET OUT_NM=REPLACE(OUT_NM,'F','F0')

若上述欄位與其它資料表有關聯性,請注意關聯性是否有設好;
再者,進行更新前,請務必先將資料備份,以免更新錯誤導致資料毀損。
行路難,難重陳。行路難,難於山,險於水。行路難,不在水,不在山,只在人情反覆間。
直接加進去就好了,但要注意欄位型態要是文字才行
update SALE set ODR_NM = '0' + ODR_NM

update SALE set OUT_NM = left(OUT_NM,1) + '0' + right(OUT_NM,5)


真的感謝樓上的 vane 及 aleck1119 大大
小弟晚上會來試試看

vane提到的要先備份小弟會謹記在心
畢竟是8年多的資料呀
毀了小弟的老爸應該會殺了小弟我
應該是這樣寫吧.

update sale set ODR_NM=REPLICATE(’0′, 7 - DATALENGTH(ODR_NM)) + ODR_NM
update sale set OUT_NM=LEFT(OUT_NM,1) + (REPLICATE(’0′, 6 - DATALENGTH(OUT_NM)-1) + SUBSTRING(OUT_NM,2,5))

這種寫法是可以讓你加幾個0都可以,其實就你的問題來看,也不用寫到這麼複雜,樓上的大大們的解法就可以了.
感謝 carlsun 的精闢解答

您的寫法中那個7 (update sale set ODR_NM=REPLICATE(’0′, 7 - DATALENGTH(ODR_NM)) + ODR_NM)
不曉得涵義是啥
可以解惑小弟一下嗎

假設小弟意會的沒錯
是您說的不管要多少個0的癥結點嗎
是不是在宣告這是要有7碼的空間?

然後第2條指令的 6
是因為前面多了LEFT(OUT_NM,1) 數字部分只有6碼
所以是宣告敘述之後需要6個空間填碼囉

是這樣的意思嗎

不過 SUBSTRING(OUT_NM,2,5) 這段就不懂了..

SQL 真是不好玩呀
昨晚還是不敢動手去做...
>>>您的寫法中那個7 (update sale set ODR_NM=REPLICATE(’0′, 7 - DATALENGTH(ODR_NM)) + ODR_NM)

7是你要的總長度, 你原本的資料是901003,長度是6, 總長是7的話就是1個0

>>>然後第2條指令的 6
>>>是因為前面多了LEFT(OUT_NM,1) 數字部分只有6碼
>>>所以是宣告敘述之後需要6個空間填碼囉

你原本的值是F90010,扣除第1碼F, 剩5碼,你要加1個0補成6碼所以給6


>>>不過 SUBSTRING(OUT_NM,2,5) 這段就不懂了..
因為前面的部分做完只會有"F0", 必須再加上你原本的資料F90010,第2個算起的5個

文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!