উত্তর:
আমি বিশ্বাস করি এটি আপনি যা খুঁজছেন তা হতে পারে:
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
আমি দ্বিতীয় উদাহরণটিতে সিনট্যাক্স পরীক্ষা করিনি have আমি নিশ্চিত না যে এটি যদি 100% কাজ করে - তবে এটির জন্য কিছু টুইটের প্রয়োজন হতে পারে - তবে এটি আপনার পছন্দসই আউটপুট কীভাবে পাবেন তা সাধারণ ধারণা দেয় con
সম্পাদনা
মন্তব্যে তালিকাবদ্ধ উদ্বেগ মোকাবেলায় ...
@ pkr298 - হ্যাঁ এসটিআর কেবল সংখ্যাগুলিতে কাজ করে ... ওপি'র ক্ষেত্রটি একটি আইডি ... সুতরাং কেবল সংখ্যা।
@ ডিজোলেটর - অবশ্যই এটি কাজ করবে না ... প্রথম প্যারামিটারটি 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 দেখতে পাবেন
এসকিউএল সার্ভার এখন সংস্করণ 2012 থেকে শুরু করে ফর্ম্যাট ফাংশন সমর্থন করে , তাই:
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;
কলামটি যদি সংখ্যাসূচক হয় তবে এটিকে প্রথমে এ জাতীয় কোড সহ ভারচরতে রূপান্তর করুন:
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
ভ্যালুতে খালি স্ট্রিং দেয় ।
যদি এখনও কেউ আগ্রহী হন তবে আমি এই নিবন্ধটি
ডেটাব্যাসে পেয়েছি UID গাইড: এসকিউএল সার্ভারে বাম প্যাডিং - 3 এলপিএডি () সমতুল্য
সংক্ষেপে, নিবন্ধে উল্লেখ করা হয়েছে 3 পদ্ধতি।
আসুন আপনার আইডি = 12 বলুন এবং আপনার এটি 0012 হিসাবে প্রদর্শিত হবে।
পদ্ধতি 1 -
রাইট () ফাংশনটি ব্যবহার করুন প্রথম পদ্ধতিটি কিছু শীর্ষস্থানীয় জিরো যুক্ত করার পরে স্ট্রিংয়ের ডানদিকের অংশটি ফিরিয়ে আনতে RIGHT () ফাংশনটি ব্যবহার করে।
SELECT RIGHT('00' + '12', 4);
ফলাফল:
0012
পদ্ধতি 2 - রাইটের সংমিশ্রণটি ব্যবহার করুন () এবং প্রতিলিপি ()
এই পদ্ধতিটি প্রায় আগের পদ্ধতির মতোই, কেবলমাত্র পার্থক্য হ'ল আমি কেবল তিনটি শূন্যকে প্রতিস্থাপন () ফাংশন দিয়ে প্রতিস্থাপন করি:
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
ফলাফল:
0012
পদ্ধতি 3 - রিপ্লেস () এবং এসটিআর () এর সংমিশ্রণটি ব্যবহার করুন
এই পদ্ধতিটি সম্পূর্ণ ভিন্ন কোণ থেকে পূর্ববর্তী পদ্ধতিগুলিতে আসে:
SELECT REPLACE(STR('12', 4),' ','0');
ফলাফল:
0012
নিবন্ধটি দেখুন, উদাহরণ সহ আরও গভীর বিশ্লেষণ রয়েছে।
এসকিউএল সার্ভারে একটি ফাংশনে আমার এটি দরকার ছিল এবং প্যাট্রিকের উত্তরটি কিছুটা সামঞ্জস্য করে।
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 সংখ্যার জন্য অঙ্কের পরিমাণটি তার লগের অবিচ্ছেদ্য উপাদান দ্বারা সন্ধান করতে পারে। এটি থেকে আমরা এটি পছন্দসই প্যাডিং প্রস্থ থেকে বিয়োগ করতে পারি। পুনরাবৃত্তি null
1 এর নীচে মানের জন্য ফিরে আসবে তাই আমাদের প্রয়োজন ifnull
।
আমার সমাধানটি দক্ষ নয় তবে এমন পরিস্থিতিতে আমাকে সহায়তা করেছে যেখানে মানগুলি (ব্যাংক চেক নম্বর এবং তারের স্থানান্তর রেফ নং) ভারচার হিসাবে সঞ্চিত ছিল যেখানে কিছু এন্ট্রিগুলির সাথে আলফা সংখ্যাসূচক মান ছিল এবং দৈর্ঘ্য cha অক্ষরের চেয়ে কম হলে আমাকে প্যাড করতে হয়েছিল।
কেউ একই পরিস্থিতি জুড়ে আসে যদি ভাগ করে নেওয়ার চিন্তা
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