2009-12-16 42 views
27

Tôi không thể tìm thấy cách đơn giản để thực hiện việc này trong T-SQL.Định dạng T-SQL số ​​nguyên thành chuỗi 2 chữ số

Tôi có ví dụ một cột (SortExport_CSV) trả về số nguyên '2' qua 90. Nếu số được lưu trữ là một chữ số, tôi cần nó để chuyển thành chuỗi gồm 2 chữ số bắt đầu bằng 0. Tôi đã cố gắng sử dụng CAST nhưng tôi gặp khó khăn về cách hiển thị kiểu ở định dạng ưa thích (0 #)

Tất nhiên là dễ thực hiện điều này ở mặt trước (SSRS, MSAccess, Excel, v.v ...) trong trường hợp này, tôi không có giao diện người dùng và phải cung cấp tập dữ liệu thô với chuỗi gồm 2 chữ số đã được định dạng.

+0

Xem. Tôi đã nói với bạn :) –

Trả lời

50
select right ('00'+ltrim(str(<number>)),2) 
+1

Loại gọn gàng, sáu biến thể SQL khác nhau trên cùng một vấn đề ... – Sparky

0

đây bạn đi

select RIGHT(REPLICATE('0', 2) + CAST(2 AS VARCHAR(2)), 2) 

nên trả lại 02

+0

Rất tốt khi sử dụng hàm REPLICATE, một chút quá mức khi một '00' đơn giản sẽ làm – cjk

+1

Nhưng nó đẹp hơn rất nhiều để duy trì – Scoregraphic

+0

Bạn không phải sử dụng REPLICATE. Chuỗi ký tự đơn '0' sẽ hoạt động tốt. – Guffa

5

Chuyển đổi giá trị thành một chuỗi, thêm một số không ở phía trước của nó (vì vậy mà nó là hai hoặc cây ký tự), và nhận được người cuối cùng nhân vật:

right('0'+convert(varchar(2),Sort_Export_CSV),2) 
+0

Guffa ... Tôi đã từ bỏ chuyển đổi một số thời gian trước đây nhưng, tis hoạt động hoàn hảo. Cảm ơn tất cả các hồi đáp của bạn. Tôi bị choáng ngợp :) –

0

thử

right('0' + convert(varchar(2), @number),2) 
16
SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2) 
FROM your_table 
+0

Luke, Đây là cái tôi đang tìm kiếm. Sử dụng CAST đơn giản và nhất quán. Cảm ơn bạn –

1

Một ví dụ khác:

select 
case when teamId < 10 then '0' + cast(teamId as char(1)) 
else cast(teamId as char(2)) end  
as 'pretty id', 
* from team 
1

Đây là chức năng nhỏ khiến giá trị pad với một char đệm cho Bạn có thể chỉ định bao nhiêu ký tự được đệm sang trái ..

Create function fsPadLeft(@var varchar(200),@padChar char(1)='0',@len int) 
     returns varchar(300) 
    as 
    Begin 
     return replicate(@PadChar,@len-Len(@var))[email protected] 
    end 

Để gọi:

declare @value int; set @value =2 
select dbo.fsPadLeft(@value,'0',2) 
0

Hãy thử điều này

số --Generate từ 2 để 90

;with numcte as(
select 2 as rn 
union all 
select rn+1 from numcte where rn<90) 

--Program rằng định dạng số dựa trên chiều dài

select case when LEN(rn) = 1 then '00'+CAST(rn as varchar(10)) else CAST(rn as varchar(10)) end number 
from numcte 

Output từng phần:

number  
002 
003 
004 
005 
006 
007 
008 
009 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
0
SELECT 
replace(str(month(DATEADD(month, -1, '2012-02-29')), 2),' ' , '0') 
7

Bạn đang tất cả làm quá nhiều công việc:

right(str([email protected]),2) 

-- for a function, same idea: 
-- 
create function zeroPad(@yourNum int, @wid int) 
as 
begin 
    return right([email protected]), @wid) 
end 
3
DECLARE @Number int = 1; 
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2) 
--OR 
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2) 
GO 
0

Bạn có thể tạo một hàm như thế này:

CREATE FUNCTION [dbo].[f_convert_int_to_2_digits](@input int) 
RETURNS varchar(10) 
AS 
BEGIN 
    --return value 
    DECLARE @return varchar(10) 

    if @input < 10 
    begin 
    set @return = '0' + convert(varchar(1), @valor) 
end 
    else 
    begin 
     set @return = convert(varchar(10), @input) 
    end 

    -- return result 
    RETURN @return 

END 

và sau đó sử dụng nó ở khắp mọi nơi:
select [dbo].[f_convert_int_to_2_digits](<some int>)

+0

Cảm ơn, tôi sẽ thử điều này :) –

0

Bạn có thể thử này

SELECT RIGHT('0' + convert(varchar(2) , '0'), 2) -- OUTPUTS : 00 
SELECT RIGHT('0' + convert(varchar(2) , '8'), 2) -- OUTPUTS : 08 
SELECT RIGHT('0' + convert(varchar(2) , '9'), 2) -- OUTPUTS : 09 
SELECT RIGHT('0' + convert(varchar(2) , '10'), 2) -- OUTPUTS : 10 
SELECT RIGHT('0' + convert(varchar(2) , '11'), 2) -- OUTPUTS : 11 

này sẽ giúp

13

Bạn có thể sử dụng T-SQL được xây dựng trong chức năng định dạng:

declare @number int = 1 
select format (@number, '0#') 
+6

Chỉ dành cho SQL Server 2012+ – JumpingJezza

Các vấn đề liên quan