শীর্ষস্থানীয় শূন্যগুলির সাথে কীভাবে চারে রূপান্তর করবেন?


99

অগ্রণী শূন্যগুলির সাথে আমার ইনট ডেটাফিল্ডকে এনভারচারে রূপান্তর করতে হবে

উদাহরণ:

1 কে '001' তে রূপান্তর করুন

867 কে '000867' এ রূপান্তর করুন etc.

ধন্যবাদ.


এটি আমার প্রতিক্রিয়া 4 ঘন্টা পরে ...

আমি এই টি-এসকিউএল স্ক্রিপ্টটি পরীক্ষা করেছি এবং আমার পক্ষে ভাল কাজ করে!

DECLARE @number1 INT, @number2 INT

SET @number1 = 1

SET @number2 = 867

SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED

SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED

আমি এই ব্যবহারকারীর ফাংশন তৈরি করেছি

টি-এসকিউএল কোড:

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

    -- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number

    -- @intlen contains the string size to return
    IF @intlen > 20
       SET @intlen = 20

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

END

উদাহরণ:

নির্বাচন করুন dbo.CIntToChar (867, 6) AS COD_ID

আউটপুট

000867


4
আপনার প্রথম নমুনায় CAST গুলি এনসিএইচআর প্রকারের পরিবর্তে এনভিচারার হওয়া উচিত, কারণ এনসিএইচএআর (3) সর্বদা 3 এর
দৈর্ঘ্যযুক্ত থাকে

উত্তর:



58

আপনি এসকিউএল সার্ভার ২০১২-তে প্রবর্তিত ফর্ম্যাট () ফাংশনটিও ব্যবহার করতে পারেন । http://technet.microsoft.com/library/hh213505.aspx

DECLARE @number1 INT, @number2 INT

SET @number1 = 1
SET @number2 = 867

SELECT FORMAT(@number1, 'd10')
SELECT FORMAT(@number2, 'd10')

আমি এসকিউএল ২০১২ তে সম্মতি জানাব, তবে এসকিউএল ২০০৮r2 বা তার বেশি বয়সীদের জন্য, আমার সমাধান ফলাফলটি পাবে
গোল্ডবিশপ

4
সবেমাত্র ফরমেট স্কেল সার্ভার 2012 পরীক্ষা করা হয়েছে - এটি "বেশ কয়েক সেকেন্ডে এক নম্বর" হিসাবে ধীর গতিতে ধীর। দূরে থাকা.
মুপোসাত

@ মুপোসাত, আপনি কি দয়া করে সেই পরীক্ষার জন্য কোড সরবরাহ করতে পারেন? এটা খুবই গুরুত্বপুর্ণ. আগাম ধন্যবাদ.
ডায়োমেডেস ডোমঙ্গুয়েজ 19

4
@ ডায়োমিডেস ডোমঙ্গুয়েজ এটি এক বছর হয়ে গেছে, সুতরাং আমার আর আসল পরীক্ষা নেই। আমি সত্যিই একটি দ্রুত সার্ভারে আরও একটি পরীক্ষা চালিয়েছি এবং 1 মিলিয়ন সংখ্যার ফর্ম্যাট করতে 32 সেকেন্ড পেয়েছি। বিশ্বের শেষ নয়, তবে নুগুইন ট্রান পোস্ট করা সমাধান এটি 1 সেকেন্ডে করে। পরীক্ষা করার জন্য কেবল @i int- এ থেকে একটি লুপ তৈরি = 0 10000000. করতে
Muposat

22

ব্যবহার করুন REPLICATEযাতে আপনাকে নেতৃস্থানীয় সমস্ত জিরো হার্ড কোড করতে না হয়:

DECLARE @InputStr int
       ,@Size     int
SELECT @InputStr=123
      ,@Size=10

PRINT REPLICATE('0',@Size-LEN(RTRIM(CONVERT(varchar(8000),@InputStr)))) + CONVERT(varchar(8000),@InputStr)

আউটপুট:

0000000123

13

এই প্রশ্নটি হাই-জ্যাকের জন্য নয় তবে নোটটি তৈরি করা দরকার যা আপনাকে (এন) CHAR ডেটা টাইপের পরিবর্তে (এন) VARCHAR ব্যবহার করতে হবে।

RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 )

বিভাগের উপরে, এসকিউএল 2005 থেকে সঠিক প্রতিক্রিয়া তৈরি হবে না

RIGHT('000' + CAST(@number1 AS NVARCHAR(3)), 3 )

বিভাগের উপরে, এসকিউএল 2005 থেকে পছন্দসই প্রতিক্রিয়া তৈরি করবে

বারচারটি আপনাকে ফ্লাইতে পছন্দসই উপসর্গের দৈর্ঘ্য সরবরাহ করবে। যেখানে স্থির দৈর্ঘ্যের ডেটা টাইপ হিসাবে দৈর্ঘ্য উপাধি এবং সমন্বয় প্রয়োজন।


6

আমি ব্যবহার করতে চাই

DECLARE @Length int
DECLARE @Number int
SET @Length = 9
SET @Number = 4

select right( POWER(10, @Length) + @Number, @Length)

এই আমাকে দেয়

000000004

4
কিছুটা হ্যাকি মনে হচ্ছে তবে এটি আমার জন্য ডিবি 2 তে কাজ করেছে। আমি কাজের উপরের উত্তরগুলি পেতে পারি না।
নাথান এম

4
আমিও এটি পছন্দ করি যদি দৈর্ঘ্যটি হার্ডকোডযুক্ত থাকে তবে আপনি কেবল RIGHT(1000+Number, 3)- সুন্দর, সংক্ষিপ্ত এবং দ্রুত
মফ-সফট

4
এটি ২০০৫ সাল থেকে সমস্ত এসকিউএল সার্ভারের রূপগুলিতে কাজ করে। পছন্দসই উত্তর।
Fandango68

4
10 মানে কি?
Fandango68

4
@ ফানডাঙ্গো 68 উপরের 'পাওয়ার (10, @ লেন্থ)' এর '10' কারণ হ'ল আমরা বেস 10 গণিত ব্যবহার করি - সুতরাং উপরের মাফ-নরম উত্তরে '1000' আক্ষরিক শক্তি পাওয়ার (10, 3) - 10 ^ 3 এর সমান = 1000.
Qxotk

4

ডেটা টাইপ "ইন্ট" 10 টির বেশি অঙ্কের হতে পারে না, এছাড়াও "লেন ()" ফাংশন ইনটসে কাজ করে, সুতরাং লেন () ফাংশনটি কল করার আগে ইনটকে স্ট্রিংয়ে রূপান্তর করার দরকার নেই।

শেষ অবধি, আপনি নিজের মামার পরিমাণটি (@intLen) এ প্যাড করতে চান এমন মোট অঙ্কের সংখ্যাটি বিবেচনা করছেন না।

অতএব, আরও সংক্ষিপ্ত / সঠিক সমাধান হ'ল:

CREATE FUNCTION rf_f_CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(10)
AS
BEGIN
    IF @intlen > 20 SET @intlen = 20
    IF @intlen < LEN(@intVal) RETURN RIGHT(CONVERT(nvarchar(10), @intVal), @intlen)
    RETURN REPLICATE('0', @intLen - LEN(@intVal)) + CONVERT(nvarchar(10), @intVal)
END

3

খুব মার্জিত নয়, তবে আমি রূপান্তর করতে চাইছি এমন সংখ্যক নেতৃস্থানীয় জিরোগুলির সাথে একটি সেট মান যুক্ত করব এবং রাইট ফাংশনটি ব্যবহার করব।

উদাহরণ:

SELECT RIGHT(CONVERT(CHAR(7),1000000 + @number2),6)

ফলাফল: '000867'


2

এসকিউএল সার্ভার ২০০৮ বা তারপরের জন্য এক লাইন সমাধান ( প্রতি সে )

DECLARE @DesiredLenght INT = 20;
SELECT 
    CONCAT(
        REPLICATE(
            '0',
            (@DesiredLenght-LEN([Column])) * (1+SIGN(@DesiredLenght-LEN([Column])) / 2) ),
        [Column])
FROM Table;

SIGNঅভিব্যক্তি দ্বারা গুণ করা সমান MAX(0, @DesiredLenght-LEN([Column]))। সমস্যাটি হ'ল MAX()কেবল একটি যুক্তি গ্রহণ করে ...


1

আমি একটি ভাল নিবন্ধ পাওয়া গেছে এখানে :

শীর্ষস্থানীয় শূন্যগুলির সাথে একটি স্ট্রিং প্যাডিং

একটি নির্দিষ্ট দৈর্ঘ্যের ডেটা রফতানি আউটপুট করার সময় আমাকে অনেক বার করতে হবে যেখানে উদাহরণস্বরূপ একটি সংখ্যাসূচক কলামটি 9 টি অক্ষরের লম্বা এবং আপনাকে 0 এর সাথে প্রিফিক্স করতে হবে।


1
    select right('000' + convert(varchar(3),id),3) from table

    example
    declare @i int
    select @i =1

select right('000' + convert(varchar(3),@i),3)

বিটিডাব্লু যদি এটি কোনও ইন্ট কলাম হয় তবে এটি এখনও শূন্য রাখবে না এটি কেবল উপস্থাপনা স্তরে করুন বা আপনার যদি সত্যই পছন্দ করতে চান


1

একই সমস্যা ছিল, আমি এভাবেই সমাধান করেছি ... সহজ এবং মার্জিত। "4" স্ট্রিংটি কত দীর্ঘ হওয়া উচিত, দৈর্ঘ্য পূর্ণসংখ্যার কতটা পার হয়ে যায় তা শূন্যের সাথে "4" পর্যন্ত প্যাড করবে।

STUFF(SomeVariableOrField,1,0,REPLICATE('0',4 - LEN(SomeVariableOrField)))

1

আমার ক্ষেত্রে আমি চেয়েছিলাম যে আমার ক্ষেত্রটি 10 ​​টি চরিত্রের ক্ষেত্রে 0 এর শীর্ষস্থানীয় (এনভিচারার (10)) রয়েছে। উত্স ফাইলটিতে অন্য টেবিলে যোগদানের জন্য নেতৃস্থানীয় 0 টির প্রয়োজন নেই। এসকিউএল সার্ভার ২০০৮ আর ২-তে থাকার কারণে এটি কেবল হয়েছিল:

ক্ষেত্র = ডানদিকে সেট করুন (('0000000000' + [ক্ষেত্র]), 10) (এটি এসকিউএল ২০১২-এর পূর্ববর্তী হিসাবে ফর্ম্যাট () ব্যবহার করতে পারবেন না)

বিদ্যমান তথ্যের বিপরীতে এটি সম্পাদন করেছেন। সুতরাং এইভাবে 1 বা 987654321 শীর্ষস্থানীয় 0 এর সাথে সমস্ত 10 স্পেস পূরণ করবে।

যেহেতু নতুন ডেটা আমদানি করা হচ্ছে এবং তারপরে কোনও অ্যাক্সেস ডাটাবেসের মাধ্যমে টেবিলের উপরে ফেলে দেওয়া হচ্ছে, কোনও নতুন রেকর্ডের জন্য এসকিউএল সার্ভার টেবিলটিতে অ্যাক্সেস থেকে সংযোজন করার সময় আমি ফর্ম্যাট ([ফিল্ড], "0000000000") ব্যবহার করতে সক্ষম হয়েছি।


0
DECLARE @number1 INT, @number2 INT

SET @number1 = 1

SET @number2 = 867

- 'আরটিআরআইএম' ব্যতীত প্রত্যাবর্তিত মানটি হয় 3__!!!

SELECT RIGHT('000' + RTRIM(CAST(@number1 AS NCHAR(3)), 3 )) AS NUMBER_CONVERTED

- 'আরটিআরআইএম' ব্যতীত প্রত্যাবর্তিত মানটি হয় 867___!!!

SELECT RIGHT('000000' + RTRIM(CAST(@number2 AS NCHAR(6)), 6 )) AS NUMBER_CONVERTED

0

ব্যবহার RIGHTকরা একটি ভাল বিকল্প তবে আপনি নিম্নলিখিতটি করতে পারেন:

SUBSTRING(CAST((POWER(10, N) + value) AS NVARCHAR(N + 1)), 2, N)

Nআপনি প্রদর্শিত মোট সংখ্যাটির সংখ্যাটি কোথায় ? সুতরাং নেতৃস্থানীয় শূন্যগুলি ( N = 3) সহ একটি 3-অঙ্কের মানটির জন্য :

SUBSTRING(CAST((POWER(10, 3) + value) AS NVARCHAR(4)), 2, 3)

বা পর্যায়ক্রমে

SUBSTRING(CAST(1000 + value) AS NVARCHAR(4)), 2, 3)

এটি যা করছে তা হ'ল পর্যাপ্ত নেতৃস্থানীয় শূন্য উত্পন্ন করার জন্য যথেষ্ট পরিমাণে 10 এর শক্তিতে পছন্দসই মান যুক্ত করছে, তারপরে শীর্ষস্থানীয় 1 কেটে যাবে।

এই কৌশলটির সুবিধা হ'ল ফলটি সর্বদা একই দৈর্ঘ্যের হবে, SUBSTRINGপরিবর্তে এর ব্যবহারের অনুমতি দিবে RIGHTযা কিছু কোয়েরি ভাষায় (যেমন এইচকিউএল) উপলভ্য নয়।


0

MYSQL এ আমার জন্য এই কাজ:

FUNCTION leadingZero(format VARCHAR(255), num VARCHAR(255))
  RETURNS varchar(255) CHARSET utf8
BEGIN
  return CONCAT(SUBSTRING(format,1,LENGTH(format)-LENGTH(num)),num);
END

উদাহরণ স্বরূপ:

leadingZero('000',999); returns '999'
leadingZero('0000',999); returns '0999'
leadingZero('xxxx',999); returns 'x999'

আশা করি এটি সাহায্য করবে। শুভেচ্ছান্তে


0

এসকিউএল সার্ভারে কাজ করে

declare @myNumber int = 123
declare @leadingChar varchar(1) = '0'
declare @numberOfLeadingChars int = 5

select right(REPLICATE ( @leadingChar , @numberOfLeadingChars ) + cast(@myNumber as varchar(max)), @numberOfLeadingChars)

উপভোগ করুন


-2

আমি ভাবছিলাম, এটি কি আপনার কোনও কাজে আসবে?

declare @val int,@len=800
select replace(str(@val,@len),' ','0')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.