2009-11-19 87 views
18

是否有在T-SQL的方式到TINYINT轉換爲VARCHAR自定義數字格式? 例如,我的TINYINT值爲3,我想將它轉換爲03的VARCH,以便它始終顯示一個2位數字。轉換數在SQL爲varchar與格式

我沒有看到轉換功能這種能力。

回答

29
RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2) 

被警告,這將削弱號> 99.你可能想在可能性因素。

1
declare @t tinyint 
set @t =3 
select right(replicate('0', 2) + cast(@t as varchar),2) 

同上:關於號碼cripping效果> 99

如果要滿足1-255那麼你可以使用

select right(replicate('0', 2) + cast(@t as varchar),3) 

但是這會給你001,010, 100等

4

使用正確的函數... 如

DECLARE @testnum TINYINT 
SET @testnum = 3 
PRINT RIGHT('00' + CONVERT(VARCHAR(2), @testnum), 2) 
4

你可以試試這個

DECLARE @Table TABLE(
     Val INT 
) 

INSERT INTO @Table SELECT 3 
INSERT INTO @Table SELECT 30 

DECLARE @NumberPrefix INT 
SET @NumberPrefix = 2 
SELECT REPLICATE('0', @NumberPrefix - LEN(Val)) + CAST(Val AS VARCHAR(10)) 
FROM @Table 
2

什麼是值範圍是多少?是0到10嗎?如果是這樣,那麼嘗試:

SELECT REPLICATE('0',2-LEN(@t)) + CAST(@t AS VARCHAR) 

那到9 0處理,以及10至99

現在,TINYINT可以達到255的值。如果你想> 99至255來處理,然後再嘗試這種解決方案:

declare @t TINYINT 
set @t =233 
SELECT ISNULL(REPLICATE('0',2-LEN(@t)),'') + CAST(@t AS VARCHAR) 

要了解解決方案中,表達的+計算零的個數左前綴字符串。

在值3的情況下,該長度爲1。2 - 1爲1。REPLICATE將一個零。 如果值爲10,則長度爲2. 2 - 2爲0. REPLICATE不添加任何內容。 在值100的情況下,長度爲-1,它產生NULL。但是,空值被處理並設置爲空字符串。

現在,如果你決定,因爲TINYINT可以包含多達255個,而您希望的格式爲三個字符,只是改變2-LEN至3-LEN在左側表達和你設置。

0

Correción:3-LEN

declare @t TINYINT 
set @t =233 
SELECT ISNULL(REPLICATE('0',3-LEN(@t)),'') + CAST(@t AS VARCHAR) 
+2

歡迎來到Stack Overflow。這個問題最初是在近3年前回答的。當您爲舊問題添加新答案時,最好詳細解釋關於答案的新穎內容或爲什麼原答案不準確(或者更可能不再準確)因爲產品已經改變)。此外,我不清楚'糾正'正在糾正什麼;你也應該清楚這一點。 – 2012-09-22 22:09:13

1

這裏是最後的答案

declare @t tinyint,@v tinyint 
set @t=23 
set @v=232 
Select replace(str(@t,4),' ','0'),replace(str(@t,5),' ','0') 

這將任意數量的工作,並通過改變str()函數的長度,你可以規定多少以下的替代您需要的前導零。當然,你的字符串長度總是> =你的數字類型可以容納的最大位數。

0

曾與一個郵政編碼場同樣的問題。有些人給我發了一個帶有拉鍊的excel文件,但他們被格式化爲#。只好將它們轉換爲字符串,以及爲前置0領先的他們,如果他們< 5 LEN ...

declare @int tinyint 
set  @int = 25 
declare @len tinyint 
set  @len = 3 

select right(replicate('0', @len) + cast(@int as varchar(255)), @len) 

你只改變@len得到你想要的東西。正如格式化,你會得到...

001 
002 
... 
010 
011 
... 
255 

理想情況下,你會 「VARCHAR(@len)」 也一樣,但吹了SQL編譯。必須拋棄一個實際的#而不是var。