2008-11-21 19 views
35

मान लें कि मेरे पास 1 का मान है। मैं उस int को शून्य गद्दीदार स्ट्रिंग में कैसे बदल सकता हूं, जैसे कि 00000001?मैं टी-एसक्यूएल में एक int को शून्य गद्देदार स्ट्रिंग में कैसे परिवर्तित करूं?

उत्तर

35
Declare @MyInt integer Set @MyInt = 123 
Declare @StrLen TinyInt Set @StrLen = 8 

Select Replace(Str(@MyInt, @StrLen), ' ' , '0') 
+0

या फ्लाई पर यदि निश्चित लंबाई दी जाती है: 'चयन स्थान (एसटीआर (DATEPART (माह, [तिथि]), 2),' ',' 0 ') ' – dakab

35

एक और तरीका है:

DECLARE @iVal int = 1 
select REPLACE(STR(@iVal, 8, 0), ' ', '0') 
+0

कैसे काम करता है? – Coops

+1

मैंने किया और यह काम करता है कि मैं यह पूछ रहा था कि ये फ़ंक्शन एक साथ कैसे काम करते हैं, शायद सवाल यह है कि – Coops

+0

के लिए एक अंतर्निहित विधि क्यों नहीं है, केवल प्रमुख रिक्त स्थान छोड़ने के लिए, प्रतिस्थापन को हटाएं, उदा। एसटीआर का चयन करें (@iVal, 8, 0) –

0

या आप वास्तव में कड़ी मेहनत कोर जाने के लिए ... चाहते हैं ;-)

declare @int int 
set @int = 1 

declare @string varchar(max) 
set @string = cast(@int as varchar(max)) 

declare @length int 
set @length = len(@string) 

declare @MAX int 
set @MAX = 8 

if @length < @MAX 
begin 
    declare @zeros varchar(8) 
    set @zeros = '' 

    declare @counter int 
    set @counter = 0 

    while (@counter < (@MAX - @length)) 
    begin 
     set @zeros = @zeros + '0' 
     set @counter = @counter + 1 
    end 
    set @string = @zeros + @string 
end 
print @string 
1

मैं एक करने के लिए पैड के लिए कोशिश कर रहा हूँ, तो विशिष्ट कुल लंबाई, मैं प्रतिलिपि और डेटालेन्थ फ़ंक्शंस का उपयोग करता हूं, जैसे:

DECLARE @INT INT 
DECLARE @UNPADDED VARCHAR(3) 
DECLARE @PADDED VARCHAR(3) 

SET @INT = 2 
SET @UNPADDED = CONVERT(VARCHAR(3),@INT) 
SET @PADDED = REPLICATE('0', 3 - DATALENGTH(@UNPADDED)) + @UNPADDED 
SELECT @INT, @UNPADDED, @PADDED 

मैंने सादगी के लिए यहां चर का उपयोग किया, लेकिन आप देखते हैं, आप कुल स्ट्रिंग की अंतिम लंबाई निर्दिष्ट कर सकते हैं और INT के आकार के बारे में चिंता न करें, जब तक कि आप < = अंतिम स्ट्रिंग लंबाई के साथ शुरू करते हैं।

1

मैं हमेशा का उपयोग करें:

SET @padded = RIGHT('z0000000000000' 
    + convert(varchar(30), @myInt), 8) 

z परोक्ष अलावा/संयोजन के लिए एक पूर्णांक में स्ट्रिंग coverting से SQL बंद हो जाता है।

1

पूर्णांक नकारात्मक आप एक समस्या है, तो यह चारों ओर पाने के लिए मैं कभी कभी ऐसा करने जा सकते हैं:

DECLARE @iVal int 
set @iVal = -1 
    select 
     case 
      when @ival >= 0 then right(replicate('0',8) + cast(@ival as nvarchar(8)),8) 
      else '-' + right(replicate('0',8) + cast(@ival*-1 as nvarchar(8)),8) 
     end 
+0

के लिए धन्यवाद इस किनारे के मामले को पकड़ना। –

7

मेरे लिए यह काम:

SELECT RIGHT('000' + CAST(Table.Field AS VARCHAR(3)),3) FROM Table 

...

मैंने इस उपयोगकर्ता फ़ंक्शन को बनाया

टी-एसक्यूएल कोड:

CREATE FUNCTION CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(24) AS BEGIN 

IF @intlen > 24 
    SET @intlen = 24 

RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(24),@intVal)))) 
    + CONVERT(nvarchar(24),@intVal) END 

उदाहरण:

चयन dbo.CIntToChar (867, 6) COD_ID

के रूप में

आउटपुट

28
एसक्यूएल सर्वर 2012 तक

अब आप यह कर सकते हैं:

format(@int, '0000#') 
+3

मैं तुमसे प्यार करता हूँ गड़बड़ :) – Charles380

+0

कमाल !! धन्यवाद! –

+0

चूसने int के लिए संक्षिप्त समाधान :) – wwmbes

0

और फिर यह ओ है ne, दोहराने का उपयोग कर:

SELECT REPLICATE('0', 7) + '1' 
बेशक

, आप उचित कार्यों के साथ शाब्दिक 7 और '1' के रूप में की जरूरत की जगह ले सकता; उपर्युक्त आपको अपना उदाहरण देता है। उदाहरण के लिए:

SELECT REPLICATE('0', 8 - LEN(CONVERT(nvarchar, @myInt))) + CONVERT(nvarchar, @myInt) 

8 वर्णों से शून्य के साथ 8 से कम स्थानों का एक पूर्णांक पैड करेगा।

अब, उत्तर के दूसरे तर्क में ऋणात्मक संख्या शून्य वापस आ जाएगी।तो, कि अगर एक संभावना है (जैसे कि, @myInt ऊपर के उदाहरण में 100 मिलियन से अधिक हो सकता है), तो आप अग्रणी शून्य के बिना संख्या वापस जाने के लिए अगर वहाँ अधिक से अधिक 8 चरित्र COALESCE उपयोग कर सकते हैं:

SELECT COALESCE(REPLICATE('0', 8 - LEN(CONVERT(nvarchar, @myInt))) + CONVERT(nvarchar, @myInt), CONVERT(nvarchar, @myInt)) 
1

बहुत सीधे आगे रास्ता साथ गद्दी के बारे में सोचना '0 के है, अगर आप अपने @ _int के 4 दशमलव के लिए तय हो गई है, तो आप 4 इंजेक्षन' 0 के:

select RIGHT('0000'+ Convert(varchar, @_int), 4) as txtnum 

; यदि आपकी निश्चित जगह 3 है, तो आप 3'0 के

select RIGHT('000'+ Convert(varchar, @_int), 3) as txtnum 

इंजेक्ट करें; नीचे मैं इंजेक्षन '00' प्रत्येक भवन

declare @_int int 
set @_int = 1 
while @_int < 100 Begin 
    select BldgName + '.Floor_' + RIGHT('00'+ Convert(varchar, @_int), 2) 
    + '.balcony' from dbo.tbl_FloorInfo group by BldgName 
    set @_int = @_int +1 
End 

परिणाम के लिए 99 लेबल उत्पन्न करने के लिए है:

'BldgA.Floor_01.balcony' 
    'BldgB.Floor_01.balcony' 
    'BldgC.Floor_01.balcony' 
    .. 
    .. 
    'BldgA.Floor_10.balcony' 
    'BldgB.Floor_10.balcony' 
    'BldgC.Floor_10.balcony' 
    .. 
    .. 
    .. 
    'BldgA.Floor_99.balcony' 
    'BldgB.Floor_99.balcony' 
    'BldgC.Floor_99.balcony' 
संबंधित मुद्दे

 संबंधित मुद्दे