全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1811
推到 Plurk!
推到 Facebook!

查詢資料時補零?

尚未結案
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-04 15:34:00 IP:202.175.xxx.xxx 未訂閱
有一varchar欄位儲存了一些數字(如1,12,123,1234等) 可否在select 時變為0001,0012,0123,1234
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-04 17:13:33 IP:211.76.xxx.xxx 未訂閱
引言: 有一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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-04 20:05:19 IP:202.175.xxx.xxx 未訂閱
我是用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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-04 20:39:43 IP:211.76.xxx.xxx 未訂閱
引言: 我是用sybase的,不是mssql
很遺憾幫不上忙了,我沒有用過 sybase。 不過下次提任何問題,請事先說明清楚會更好。 發表人 - JackTasy 於 2005/01/04 20:41:00
------
JackTasy
pigbaby
初階會員


發表:2
回覆:84
積分:47
註冊:2002-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-05 08:08:46 IP:210.200.xxx.xxx 未訂閱
請問您的目的是要在DBGRID上看到資料要補零呢? 還是說要做特殊用途? 如果在前項可以用ADOQUERY中的欄位FORMAT克服    
引言: 我是用sybase的,不是mssql
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-05 11:34:58 IP:218.163.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-06 18:13:34 IP:202.175.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-06 18:15:01 IP:202.175.xxx.xxx 未訂閱
謝謝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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-01-07 13:33:31 IP:218.163.xxx.xxx 未訂閱
謝謝pgdennis,這就是我想要的效果 但請問right,replicate這兩個函數有甚麼作用 ==> 首先用replicate來重複你要補的字元,例如有一字串長度14,不足14長度的你前面 要補0。變成 000000000000001234,00000000000000234等(前面都補14個0)。 組合起來的字串會超過14個字元。 這時就需要用right函數來取右邊數來的14個字元,這時取出的值就是你要的 同oracle的PLAD函數。 星期一,星期二...星期日..星期一..無窮迴圈@@
------
星期一,二...無窮迴圈@@
系統時間:2024-05-19 8:44:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!