查詢資料時補零? |
尚未結案
|
chrislao
初階會員 ![]() ![]() 發表:86 回覆:69 積分:36 註冊:2002-12-28 發送簡訊給我 |
|
JackTasy
初階會員 ![]() ![]() 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
引言: 有一varchar欄位儲存了一些數字(如1,12,123,1234等) 可否在select 時變為0001,0012,0123,1234可! 假設你的資料庫是 MSSQL,TableName=employee,該欄位是empnum (varchar) 以下是我測試 ok 的語法,你試試: select stuff('0000',4-datalength(ltrim(empnum)) 1,datalength(ltrim(empnum)),empnum) as ABC,* from employee ABC 欄位就是你要的前補 0 的輸出欄位。 補充說明 stuff 指令: stuff('abcdef',2,3,'ijklmn') ,刪除然後插入字串 從來源字串abcdef位置2開始刪除3個字元,再插入字串ijklmn,結果為 aijklmnef 發表人 - JackTasy 於 2005/01/04 17:18:33
------
JackTasy |
chrislao
初階會員 ![]() ![]() 發表:86 回覆:69 積分:36 註冊:2002-12-28 發送簡訊給我 |
我是用sybase的,不是mssql
引言:引言: 有一varchar欄位儲存了一些數字(如1,12,123,1234等) 可否在select 時變為0001,0012,0123,1234可! 假設你的資料庫是 MSSQL,TableName=employee,該欄位是empnum (varchar) 以下是我測試 ok 的語法,你試試: select stuff('0000',4-datalength(ltrim(empnum)) 1,datalength(ltrim(empnum)),empnum) as ABC,* from employee ABC 欄位就是你要的前補 0 的輸出欄位。 補充說明 stuff 指令: stuff('abcdef',2,3,'ijklmn') ,刪除然後插入字串 從來源字串abcdef位置2開始刪除3個字元,再插入字串ijklmn,結果為 aijklmnef 發表人 - JackTasy 於 2005/01/04 17:18:33 |
JackTasy
初階會員 ![]() ![]() 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
|
pigbaby
初階會員 ![]() ![]() 發表:2 回覆:84 積分:47 註冊:2002-09-02 發送簡訊給我 |
|
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
1.sybase也可佣STUFF function。不過不知道可否達到你的需求。
2.參考http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.4
How to pad with leading zeros an int or smallint.
你的需求變成
select right( replicate( "0", 4) convert( varchar, 123 ),4) ==>0123 select right( replicate( "0", 4) convert( varchar, 23 ),4) ==>0023 依此類推.....星期一,星期二...星期日..星期一..無窮迴圈@@
------
星期一,二...無窮迴圈@@ |
chrislao
初階會員 ![]() ![]() 發表:86 回覆:69 積分:36 註冊:2002-12-28 發送簡訊給我 |
引言: 1.sybase也可佣STUFF function。不過不知道可否達到你的需求。 2.參考http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.4 How to pad with leading zeros an int or smallint. 你的需求變成select right( replicate( "0", 4) convert( varchar, 123 ),4) ==>0123 select right( replicate( "0", 4) convert( varchar, 23 ),4) ==>0023 依此類推.....星期一,星期二...星期日..星期一..無窮迴圈@@ |
chrislao
初階會員 ![]() ![]() 發表:86 回覆:69 積分:36 註冊:2002-12-28 發送簡訊給我 |
謝謝pgdennis,這就是我想要的效果
但請問right,replicate這兩個函數有甚麼作用
引言: 1.sybase也可佣STUFF function。不過不知道可否達到你的需求。 2.參考http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.4 How to pad with leading zeros an int or smallint. 你的需求變成select right( replicate( "0", 4) convert( varchar, 123 ),4) ==>0123 select right( replicate( "0", 4) convert( varchar, 23 ),4) ==>0023 依此類推.....星期一,星期二...星期日..星期一..無窮迴圈@@ |
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
謝謝pgdennis,這就是我想要的效果
但請問right,replicate這兩個函數有甚麼作用
==>
首先用replicate來重複你要補的字元,例如有一字串長度14,不足14長度的你前面
要補0。變成 000000000000001234,00000000000000234等(前面都補14個0)。
組合起來的字串會超過14個字元。
這時就需要用right函數來取右邊數來的14個字元,這時取出的值就是你要的
同oracle的PLAD函數。
------
星期一,二...無窮迴圈@@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |