現(xiàn)象:
在開(kāi)發(fā)的過(guò)程中,往往需要數(shù)字和字符串互轉(zhuǎn)。在轉(zhuǎn)換的過(guò)程中,可能需要把1編程00001,這樣的格式。實(shí)現(xiàn)這種樣子是有非常多的方法,本文主要提供一種自定義函數(shù)來(lái)實(shí)現(xiàn)
?
說(shuō)明:
???????? 一般來(lái)說(shuō)這種處理主要使用CONVERT或者CAST來(lái)實(shí)現(xiàn)即可。思路是先轉(zhuǎn)換為字符串然后在不上足夠數(shù)量的0,最后使用RIGHT函數(shù),從右邊取出需要長(zhǎng)度。
?
案例:
???????? 本例中使用AdventureWork數(shù)據(jù)庫(kù)作為例子。
首先,執(zhí)行下面語(yǔ)句:
-- 查詢部門(mén)數(shù)據(jù)
SELECT DepartmentID , Name
FROM AdventureWorks . HumanResources . Department
?
結(jié)果如下:
?
然后,使用CAST將原來(lái)部門(mén)編號(hào)轉(zhuǎn)換成VARCHAR()字符串。接著加上固定數(shù)量的0,然后利用RIGHT函數(shù),從右邊去除指定數(shù)量的字符串。
代碼如下:
-- 查詢部門(mén)數(shù)據(jù)并將數(shù)字根據(jù)位數(shù)補(bǔ)上 0
SELECT RIGHT( REPLICATE ( '0' , 5 )+ CAST ( DepartmentID AS varchar ( 10 )), 5 ) AS 'DepartmentID' , Name
FROM AdventureWorks . HumanResources . Department
ORDER BY DepartmentID
?
結(jié)果:
以上的是準(zhǔn)備工作,現(xiàn)在開(kāi)始編寫(xiě)一個(gè)自定義函數(shù)來(lái)實(shí)現(xiàn),此函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是要補(bǔ)0或者其他數(shù)目的個(gè)數(shù),第二個(gè)是要轉(zhuǎn)換的數(shù)字。最后把結(jié)果以字符串方式返回:
?
函數(shù)代碼:
CREATE FUNCTION fnZero
(
??? @n INT ,
??? @i INT
)
RETURNS VARCHAR ( 125 )
AS
BEGIN
??? RETURN
??? (
??????? RIGHT( REPLICATE ( '0' , @n )+ CAST ( @i as varchar ( 125 )), @n )
??? )
END
?
使用例子:
-- 查詢部門(mén)數(shù)據(jù)并將數(shù)字根據(jù)位數(shù)補(bǔ)上 0
SELECT DepartmentID as 'DepartmentID' , dbo . fnZero ( 5 , DepartmentID ) as 'DepartmentID'
FROM AdventureWorks . HumanResources . Department
ORDER BY 1
注意,由于兩個(gè)列都是同名,所以O(shè)RDER BY 那里使用了1,而不是列名.
結(jié)果如下:
?
當(dāng)然,也可以改進(jìn)該函數(shù),使得函數(shù)能滿足很多要求.這部分請(qǐng)讀者自己去研究了.
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
