এসকিউএল কলামে অক্ষরের উদাহরণগুলি কীভাবে গণনা করা যায়


111

আমার একটি বর্গাকার কলাম রয়েছে যা 100 'Y' বা 'N' অক্ষরের স্ট্রিং। উদাহরণ স্বরূপ:

YYNYNYYNNNYYNY ...

প্রতিটি সারিতে সমস্ত 'ওয়াই' প্রতীক গণনা করার সহজ উপায় কী।


1
আপনি প্ল্যাটফর্ম নির্দিষ্ট করতে পারেন? মাইএসকিউএল, এমএসএসকিউএল, ওরাকল?
ভিনসেন্ট রামধনি

হ্যাঁ - ওরাকল দিয়ে মনে হচ্ছে আপনার দৈর্ঘ্যের দরকার - লেন নয়
JGFMK

উত্তর:


96

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

SELECT LEN(REPLACE(myColumn, 'N', '')) 
FROM ...

18
কেবল সচেতন থাকুন যে যদি স্ট্রিংয়ে "N" বা "Y" এর বেশি থাকে তবে এটি ভুল হতে পারে। আরও শক্তিশালী পদ্ধতির জন্য নিকফের সমাধান দেখুন।
টম এইচ

319

এই স্নিপেট নির্দিষ্ট পরিস্থিতিতে কাজ করে যেখানে আপনার বুলিয়ান রয়েছে: এটির উত্তর "সেখানে কতজন নন-এনএস রয়েছে?" Answers

SELECT LEN(REPLACE(col, 'N', ''))

যদি, অন্য কোনও পরিস্থিতিতে আপনি কোনও নির্দিষ্ট স্ট্রিংয়ের ক্ষেত্রে নির্দিষ্ট চরিত্রের (যেমন 'ওয়াই') উদাহরণগুলি গণনা করার চেষ্টা করছেন তবে এটি ব্যবহার করুন:

SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))

32
দ্বিতীয়টি এখানে সেরা উত্তর। বাকী সমস্তগুলি কেবল দুটি পৃথক অক্ষরযুক্ত স্ট্রিংয়ের অদ্ভুত পরিস্থিতিতে নির্ভর করে।
স্টিভ বেনেট

5
কেবল একটি নোট: টি-এসকিউএল-তে আপনাকে লেন্থের পরিবর্তে লেন ব্যবহার করতে হবে।
লুক

4
@ নিকফ এসকিউএল লেন ফাংশনটি ফাঁকা জায়গাগুলি ছাঁটাচ্ছে তাই আপনি যদি কোনও স্ট্রিংয়ের মধ্যে কোনও জায়গার কতগুলি উপস্থিতি সন্ধান করছেন তবে আসুন 'হ্যালো' বলে ফেলুন 0. তাই। লেন নির্বাচন করুন (কল + '~') - লেন (প্রতিস্থাপন (করল, 'ওয়াই', '') + '~')
ডোমেনিক

3
আপনি যদি স্থান ফাঁকা করার বিষয়ে উদ্বিগ্ন হন তবে পরিবর্তে DATALENGTH ফাংশনটি ব্যবহার করুন।
স্টিভেনহাইট

2
@ স্টিভেনহাইট ডেটাএলএনজিএইচ ব্যবহৃত বাইটের সংখ্যা প্রদান করে। সুতরাং এনভিচারার দ্বিগুণ হবে।
ডোমেনিকার

18

এটি আমাকে প্রতিবার সঠিক ফলাফল দিয়েছে ...

এটি আমার স্ট্রিপস ক্ষেত্রের ...

হলুদ, হলুদ, হলুদ, হলুদ, হলুদ, হলুদ, কালো, হলুদ, হলুদ, লাল, হলুদ, হলুদ, হলুদ, কালো

  • 11 ইয়েলো
  • 2 কালো
  • 1 লাল
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red') 
  FROM t_Contacts

এটি খুব চালাক উপায়! আপনাকে ধন্যবাদ
থেল্ট

13
DECLARE @StringToFind VARCHAR(100) = "Text To Count"

SELECT (LEN([Field To Search]) - LEN(REPLACE([Field To Search],@StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind), 0), 1) --protect division from zero
FROM [Table To Search]

+1 এটি @ নিকফের দ্বিতীয় পরামর্শটিকে বাড়িয়েছে যাতে এটি আপনাকে স্ট্রিংয়ের উদাহরণগুলির সংখ্যাটি জানায় এমনকি আপনি যে স্ট্রিংটির সন্ধান করছেন সেটি 1 টির চেয়ে বেশি অক্ষর রয়েছে
কেভিন হাইড

@ ডোমেনিকারের সম্পাদনা এই উত্তরটিকে ভেঙে দিয়েছে এবং আমার সম্পাদনা প্রত্যাখ্যান করা হয়েছে। বিভাগটি হওয়া উচিত LEN(@StringToFind)
জেমি কিটসন

@ জ্যামিক ক্ষমা চাই আমি সংশোধিত কোড জমা দিয়েছি, তবে কেন আপনার সম্পাদনা প্রত্যাখ্যান করা হয়েছে তা জানেন না।
ডোমেনিকার

@ ডোমেনিকর আপনার মূল কোডটিতে ফিরে যেতে হবে, আপনার সম্পাদনাটি কোডটিকে কোনও উদ্দেশ্যহীন করে তোলে, কখনই নਾਲ @StringToFindবা ফাঁকা হবে না be
জ্যামি কিটসন

@ জামিকিটসন আমি অন্যথায় দেখতে পাচ্ছি শূন্য দ্বারা বিভাজনের জন্য চেক করা সেরা অনুশীলনের একটি নীতি। এছাড়াও, জায়গাগুলির সংখ্যা গণনা Field To Searchশূন্যের সাথে ভাগ পেতে পারে কারণ Len(' ')শূন্যটি ফেরত দেয়।
ডোমেনিকার




0

এটা চেষ্টা কর

declare @v varchar(250) = 'test.a,1  ;hheuw-20;'
-- LF   ;
select len(replace(@v,';','11'))-len(@v)

0

এটা চেষ্টা কর. এটি নির্ধারণ করে একক অক্ষর সংঘটন পাশাপাশি প্রধান স্ট্রিংতে সাব-স্ট্রিং সংঘটন।

SELECT COUNT(DECODE(SUBSTR(UPPER(:main_string),rownum,LENGTH(:search_char)),UPPER(:search_char),1)) search_char_count
FROM DUAL
connect by rownum <= length(:main_string);

0

আপনি যদি একক অক্ষরের চেয়েও বেশি স্ট্রিংয়ের সংখ্যার সংখ্যা গণনা করতে চান তবে আপনি পূর্ববর্তী সমাধানটি রিজেক্সের সাহায্যে ব্যবহার করতে পারেন, বা এই সমাধানটি STRING_SPLIT ব্যবহার করে, যা আমার বিশ্বাস এসকিউএল সার্ভার ২০১ 2016 সালে প্রবর্তিত হয়েছিল Also এছাড়াও আপনার সামঞ্জস্যতাও প্রয়োজন ১৩০ এবং এর চেয়ে বেশি স্তর।

ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130

--some data
DECLARE @table TABLE (col varchar(500))
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverwhateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)~'

--string to find
DECLARE @string varchar(100) = 'CHAR(10)'

--select
SELECT 
    col
  , (SELECT COUNT(*) - 1 FROM STRING_SPLIT (REPLACE(REPLACE(col, '~', ''), 'CHAR(10)', '~'), '~')) AS 'NumberOfBreaks'
FROM @table

0

নিকফ প্রদত্ত দ্বিতীয় উত্তরটি খুব চালাক। তবে এটি কেবলমাত্র 1 এর উপ-স্ট্রিংয়ের একটি অক্ষরের দৈর্ঘ্যের জন্য কাজ করে এবং স্পেসগুলি উপেক্ষা করে ign বিশেষত, আমার ডেটাতে দুটি শীর্ষস্থানীয় স্পেস ছিল, যখন এসকিউএল সাহায্যে মুছে ফেলে (আমি এটি জানতাম না) যখন ডান হাতের সমস্ত অক্ষর সরিয়ে ফেলা হয়। যার অর্থ ছিল

" জন স্মিথ"

নিকফের পদ্ধতিটি ব্যবহার করে 12 টি উত্পন্ন করেছে, যেখানে:

"জো ব্লগস, জন স্মিথ"

উত্পাদিত 10, এবং

"জো ব্লগস, জন স্মিথ, জন স্মিথ"

20 উত্পন্ন হয়েছে।

অতএব আমি সমাধানটি নিম্নে সামান্য সংশোধন করেছি, যা আমার পক্ষে কাজ করে:

Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS

আমি নিশ্চিত কেউ এটি করার আরও ভাল উপায় সম্পর্কে ভাবতে পারে!


0

আপনি এটি চেষ্টা করতে পারেন

-- DECLARE field because your table type may be text
DECLARE @mmRxClaim nvarchar(MAX) 

-- Getting Value from table
SELECT top (1) @mmRxClaim = mRxClaim FROM RxClaim WHERE rxclaimid_PK =362

-- Main String Value
SELECT @mmRxClaim AS MainStringValue

-- Count Multiple Character for this number of space will be number of character
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'GS', ' ')) AS CountMultipleCharacter

-- Count Single Character for this number of space will be one
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'G', '')) AS CountSingleCharacter

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


0

সমাধানের নীচে সীমাবদ্ধতার সাথে স্ট্রিং থেকে উপস্থিত অক্ষরের কোনও সন্ধান করতে সহায়তা করে:

1) নির্বাচন লেন (প্রতিস্থাপন (আমার কলাম, 'এন', '')) ব্যবহার করে, তবে সীমাবদ্ধতা এবং নীচের অবস্থায় ভুল আউটপুট:

লেন নির্বাচন করুন (প্রতিস্থাপন ('YYNYNYYNNNYYNY', 'এন', ''));
--8 - সঠিক

লেন নির্বাচন করুন (পুনরায় স্থান ('123a123a12', 'ক', ''));
--8 - ভুল

লেন নির্বাচন করুন (পুনরায় (123a123a12 ',' 1 ',' '));
--7 - ভুল

2) সঠিক আউটপুট জন্য নীচের সমাধান সঙ্গে চেষ্টা করুন:

  • একটি ফাংশন তৈরি করুন এবং প্রয়োজন অনুযায়ী সংশোধন করুন।
  • এবং নীচের হিসাবে কল ফাংশন

dbo.vj_count_char_from_string ('123a123a12', '2') নির্বাচন করুন;
- 2 - সঠিক

dbo.vj_count_char_from_string ('123a123a12', 'a') নির্বাচন করুন;
- 2 - সঠিক

-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      VIKRAM JAIN
-- Create date: 20 MARCH 2019
-- Description: Count char from string
-- =============================================
create FUNCTION vj_count_char_from_string
(
    @string nvarchar(500),
    @find_char char(1)  
)
RETURNS integer
AS
BEGIN
    -- Declare the return variable here
    DECLARE @total_char int; DECLARE @position INT;
    SET @total_char=0; set @position = 1;

    -- Add the T-SQL statements to compute the return value here
    if LEN(@string)>0
    BEGIN
        WHILE @position <= LEN(@string) -1
        BEGIN
            if SUBSTRING(@string, @position, 1) = @find_char
            BEGIN
                SET @total_char+= 1;
            END
            SET @position+= 1;
        END
    END;

    -- Return the result of the function
    RETURN @total_char;

END
GO

0

আপনার যদি আরও দুটি ধরণের অক্ষরের সাথে স্ট্রিংয়ে চরটি গণনা করা প্রয়োজন, আপনি 'n' -কিছু অপারেটরের পরিবর্তে ব্যবহার করতে পারেন বা চরগুলির রেজেক্স আপনার প্রয়োজনীয় চরটি গ্রহণ করুন।

SELECT LEN(REPLACE(col, 'N', ''))

-1

কেউ যদি সঠিকভাবে ফর্ম্যাটেড ফোন নম্বরটি দিয়ে যাচ্ছেন কিনা তা দেখার জন্য আমি ওরাকল এসকিউএল এ যা ব্যবহার করেছি তা এখানে:

WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2

প্রথম অংশটি ফোন নম্বরটিতে কেবলমাত্র নম্বর রয়েছে কিনা তা পরীক্ষা করে দেখায় এবং হাইফেন এবং দ্বিতীয় অংশটি ফোন নম্বরটিতে মাত্র দুটি হাইফেন রয়েছে কিনা তা পরীক্ষা করে দেখেছে।


এই নম্বরটি ফোন নম্বরগুলির সাথে কী করবে? এটি টি-এসকিউএল সমাধানও
বেন

-1

উদাহরণস্বরূপ, এসকিউএল কলামে অক্ষর (ক) এর গণনা উদাহরণগুলি গণনা করার জন্য -> নামটি কলামের নাম '' (এবং ডাবলকোয়েটের খালি খালি আমি একটি প্রতিস্থাপন করছি nocharecter @ '' দিয়ে)

টেস্টিং থেকে লেন (নাম) - লেন (প্রতিস্থাপন (নাম, 'এ', '')) নির্বাচন করুন

লেন নির্বাচন করুন ('YYNYNYYNNNYYNY') - লেন (প্রতিস্থাপন ('YYNYNYYNNNYYNY', 'y', ''))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.