線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1677
推到 Plurk!
推到 Facebook!

如果判斷這個nvarchar是否可以轉換成numberic啊(mssql)

答題得分者是:pedro
hua2000
中階會員


發表:102
回覆:200
積分:65
註冊:2006-11-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-23 22:01:37 IP:125.92.xxx.xxx 訂閱
mssql database 有一列cc (nvarchar(15) , 我想通過一個mssql database 裡的function去返回一個值,如果cc列可以轉換成數值 numberic(15,3)  的話,那么就返回這個numberic(15,3),如果不能轉換的話(比如: 它裡面含有字母或別的不可被轉換的格式),就返回0.000,這個function如何寫啊?


多謝各位了


在線等待
編輯記錄
hua2000 重新編輯於 2007-07-24 09:31:10, 註解 無‧
hua2000 重新編輯於 2007-07-24 09:32:18, 註解 無‧
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-24 12:30:39 IP:60.248.xxx.xxx 未訂閱
就把cc欄位逐字去判斷是否為數字,有文字,直接返回0

當全部為數字時,用Cast或Convert去強轉型成Decimal

自己動手做看看吧
hua2000
中階會員


發表:102
回覆:200
積分:65
註冊:2006-11-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-24 19:23:33 IP:125.92.xxx.xxx 訂閱
我試了一下,有一定的難度啊

因為這個字串中,有可能包括多個".",或可能包含多個space,或有@等字符在裡面,或包含別個一些特別的字符等等,我都不知如何判斷這么多的特殊情況?只要它是任意一種情況,這個轉換就不能進行了,就全部停止了,不好判斷啊







在線等待您的幫助。


多謝
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-24 20:22:11 IP:61.216.xxx.xxx 未訂閱
本來想說需一個迴圈逐字判斷

後來查看help,有個IsNumeric函式可直接使用,配合case及cast,
如此一個語法就解決

declare @table1 table(cc varchar(20))
insert @table1
select 'A@X#CC'

insert @table1
select '2341'

insert @table1
select '~124'

SELECT Case when ISNUMERIC(cc)=1 then Cast(cc as decimal(10,4)) else 0 end DecVal
FROM @table1


delete @table1

hua2000
中階會員


發表:102
回覆:200
積分:65
註冊:2006-11-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-24 22:16:22 IP:219.128.xxx.xxx 訂閱
多謝你的這個FUNCTION,太有用了,

系統時間:2024-05-18 23:08:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!