जवाबों:
मेरा मानना है कि यह वही हो सकता है:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
या
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
मैंने दूसरे उदाहरण पर वाक्य रचना का परीक्षण नहीं किया है। मुझे यकीन नहीं है कि अगर यह 100% काम करता है - तो इसे कुछ ट्विकिंग की आवश्यकता हो सकती है - लेकिन यह सामान्य विचार बताता है कि आपके वांछित आउटपुट को कैसे प्राप्त किया जाए।
संपादित करें
टिप्पणियों में सूचीबद्ध चिंताओं को दूर करने के लिए ...
@ pkr298 - हां एसटीआर केवल संख्याओं पर काम करता है ... ओपी का क्षेत्र एक आईडी है ... इसलिए केवल संख्या।
@Desolator - बेशक जो काम नहीं करेगा ... पहला पैरामीटर 6 वर्ण लंबा है। आप कुछ ऐसा कर सकते हैं:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
यह सैद्धांतिक रूप से लक्ष्य पदों को स्थानांतरित करना चाहिए ... संख्या जितनी बड़ी हो जाती है, इसे हमेशा काम करना चाहिए .... भले ही इसकी 1 या 123456789 ...
इसलिए यदि आपका अधिकतम मूल्य 123456 है ... तो आपको 0000123456 दिखाई देगा और यदि आपका न्यूनतम मूल्य 1 है तो आपको 0000000001 दिखाई देगा
SQL सर्वर अब संस्करण 2012 से शुरू होने वाले FORMAT फ़ंक्शन का समर्थन करता है , इसलिए:
SELECT FORMAT(id, '0000') FROM TableA
चाल चलेगा।
यदि आपकी आईडी या कॉलम एक में है varcharऔर एक संख्या का प्रतिनिधित्व करता है जिसे आप पहले परिवर्तित करते हैं:
SELECT FORMAT(CONVERT(INT,id), '0000') FROM TableA
declare @T table(id int)
insert into @T values
(1),
(2),
(12),
(123),
(1234)
select right('0000'+convert(varchar(4), id), 4)
from @T
परिणाम
----
0001
0002
0012
0123
1234
पुरानी पोस्ट, लेकिन शायद इससे किसी को मदद मिलती है:
4 गैर-रिक्त वर्णों के समाप्त होने तक इसे पूरा करने के लिए:
SELECT RIGHT ('0000'+COLUMNNAME, 4) FROM TABLENAME;
10 तक पूरा करने के लिए:
SELECT RIGHT ('0000000000'+COLUMNNAME, 10) FROM TABLENAME;
यदि कॉलम संख्यात्मक है , तो इसे ऐसे कोड के साथ पहले varchar में बदलें:
Select RIGHT('0000'+Convert(nvarchar(20), COLUMNNAME), 4)
From TABLENAME
और एक संख्यात्मक क्षेत्र के साथ 10 तक पूरा करने के लिए:
SELECT RIGHT ('0000000000'+Convert(nvarchar(20), COLUMNNAME), 10) FROM TABLENAME;
- कृपया इन पर गौर करें।
select FORMAT(1, 'd4');
select FORMAT(2, 'd4');
select FORMAT(12, 'd4');
select FORMAT(123, 'd4');
select FORMAT(1234, 'd4');
- मुझे उम्मीद है कि ये आपकी मदद करेंगे
यह स्ट्रिंग्स, पूर्णांक और संख्यात्मक के लिए काम करता है:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
जहां 4वांछित लंबाई है। 4 से अधिक अंकों के साथ संख्याओं के लिए काम करता है, NULLमूल्य पर खाली स्ट्रिंग देता है ।
अगर किसी को अभी भी दिलचस्पी है, तो मुझे DATABASE.GUIDE पर यह लेख मिला:
SQL सर्वर में लेफ्ट पैडिंग - 3 LPAD () समकक्ष
संक्षेप में, उस लेख में 3 विधियाँ उल्लिखित हैं।
मान लीजिए कि आपकी आईडी = 12 है और आपको इसे 0012 के रूप में प्रदर्शित करने की आवश्यकता है।
विधि 1 - राइट का उपयोग करें () फ़ंक्शन
पहली विधि कुछ प्रमुख शून्य को जोड़ने के बाद स्ट्रिंग के केवल सबसे दाहिने हिस्से को वापस करने के लिए राइट () फ़ंक्शन का उपयोग करती है।
SELECT RIGHT('00' + '12', 4);
परिणाम:
0012
विधि 2 - RIGHT () और REPLICATE के संयोजन का उपयोग करें (
यह विधि लगभग पिछले पद्धति की तरह ही है, एकमात्र अंतर यह है कि मैं केवल तीन शून्य रिप्लेसमेंट () फ़ंक्शन के साथ हूं:
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
परिणाम:
0012
विधि 3 - उत्तर () और एसटीआर () के संयोजन का उपयोग करें
यह विधि पिछले तरीकों से पूरी तरह से अलग कोण से आती है:
SELECT REPLACE(STR('12', 4),' ','0');
परिणाम:
0012
लेख देखें, उदाहरणों के साथ गहराई से विश्लेषण में अधिक है।
मुझे SQL सर्वर पर एक फ़ंक्शन में इसकी आवश्यकता थी और पैट्रिक के उत्तर को थोड़ा समायोजित किया।
declare @dossierId int = 123
declare @padded_id varchar(7)
set @padded_id = REPLACE(
SPACE(7 - LEN(@dossierId)) + convert(varchar(7), @dossierId),
SPACE(1),
'0')
SELECT @dossierId as '@dossierId'
,SPACE(LEN(@dossierId)) + convert(varchar(7)
,@dossierId) as withSpaces
,@padded_id as '@padded_id'
समारोह बनाएँ:
Create FUNCTION [dbo].[PadLeft]
(
@Text NVARCHAR(MAX) ,
@Replace NVARCHAR(MAX) ,
@Len INT
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @var NVARCHAR(MAX)
SELECT @var = ISNULL(LTRIM(RTRIM(@Text)) , '')
RETURN RIGHT(REPLICATE(@Replace,@Len)+ @var, @Len)
END
उदाहरण:
Select dbo.PadLeft('123456','0',8)
SELECT @var = LTRIM(RTRIM(@Text))
मैंने एक समारोह बनाया:
CREATE FUNCTION [dbo].[fnPadLeft](@int int, @Length tinyint)
RETURNS varchar(255)
AS
BEGIN
DECLARE @strInt varchar(255)
SET @strInt = CAST(@int as varchar(255))
RETURN (REPLICATE('0', (@Length - LEN(@strInt))) + @strInt);
END;
उपयोग करें: dbo.fnPadLeft (123, 10) का चयन करें
रिटर्न: 0000000123
यदि आवश्यक हो तो कुछ ओबीसीबीसी का अनुपालन निम्नलिखित हो सकता है:
select ifnull(repeat('0', 5 - (floor(log10(FIELD_NAME)) + 1)), '')
+ cast (FIELD as varchar(10))
from TABLE_NAME
यह इस तथ्य पर आधारित है कि आधार -10 संख्या के लिए अंकों की मात्रा इसके लॉग के अभिन्न घटक द्वारा पाई जा सकती है। इससे हम इसे वांछित पैडिंग चौड़ाई से घटा सकते हैं। पुनरावृत्ति null1 के तहत मूल्यों के लिए वापस आ जाएगी ताकि हमें ज़रूरत हो ifnull।
मेरा समाधान कुशल नहीं है, लेकिन उस स्थिति में मेरी मदद करता है जहां मान (बैंक चेक नंबर और वायर ट्रांसफर नं।) को varchar के रूप में संग्रहीत किया गया था, जहां कुछ प्रविष्टियों में उनके साथ अल्फा संख्यात्मक मान थे और अगर लंबाई 6 वर्णों से छोटी है तो मुझे पैड करना होगा।
अगर कोई समान स्थिति में आता है तो साझा करने के लिए सोचा
declare @minlen int = 6
declare @str varchar(20)
set @str = '123'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 000123
set @str = '1234'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 001234
set @str = '123456'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456
set @str = '123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456789
set @str = '123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456789
set @str = 'NEFT 123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: NEFT 123456789
एक सरल उदाहरण होगा
DECLARE @number INTEGER
DECLARE @length INTEGER
DECLARE @char NVARCHAR(10)
SET @number = 1
SET @length = 5
SET @char = '0'
SELECT FORMAT(@number, replicate(@char, @length))
मैंने ऐसा करने के लिए एक फ़ंक्शन बनाया, जहां आप वांछित आउटपुट वर्ण लंबाई निर्दिष्ट कर सकते हैं:
CREATE FUNCTION [dbo].[udfLeadingZero]
(
@String VARCHAR(MAX)
, @Len INT
)
RETURNS VARCHAR(MAX)
BEGIN
SET @String = RIGHT(REPLICATE('0',@Len)+@String,@Len)
RETURN @String
END
GO