টি-এসকিউএল-এ একটি স্ট্রিংয়ে শেষ চরিত্রটি সরাবেন?


139

আমি কীভাবে একটি স্ট্রিংয়ের মধ্যে শেষ চরিত্রটি সরিয়ে ফেলব T-SQL?

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

'TEST STRING'

ফিরে:

'TEST STRIN'

উত্তর:


195

যেমন

DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'

-- Chop off the end character
SET @String = 
     CASE @String WHEN null THEN null 
     ELSE (
         CASE LEN(@String) WHEN 0 THEN @String 
            ELSE LEFT(@String, LEN(@String) - 1) 
         END 
     ) END


SELECT @String

71
বিকল্পভাবে: বাম বাছাই করুন (আপনার কলাম নাম, লেন (আপনার কলাম নাম) - 1) আপনার টেবিল থেকে
কাইল বি।

3
নাল ধরা পড়ার জন্য ধন্যবাদ - ইসনুল (লেফট (@ স্ট্রিং, লেন (@ স্ট্রিং) - 1), 'এরআরএমএসজি') সমাধান করবে
ভলভক্স

2
@ ভলভক্স এটি এখনও ব্যতিক্রম ছুঁড়ে ফেলবে যদি স্ট্রিংটি খালি স্ট্রিং হয়, আমি এই দৃশ্যটি পরিচালনা করতে আপনার উত্তরটি পরিবর্তন করছি।
ইমরান রিজভী

106

যদি কোনও কারণে আপনার কলামের যুক্তি জটিল (কেস ... তারপর ... অন্য ... শেষ) হয়ে থাকে তবে উপরের সমাধানগুলি আপনাকে লেন () ফাংশনে একই লজিকটির পুনরাবৃত্তি করতে হবে। একই যুক্তিকে সদৃশ করা একটি জগাখিচুড়ি হয়ে যায়। যদি এটি হয় তবে এটি সমাধান করার মতো সমাধান। এই উদাহরণটি সর্বশেষ অযাচিত কমা থেকে মুক্তি পেয়েছে। অবশেষে আমি প্রতিবেদনের জন্য একটি ব্যবহার পেয়েছি।

select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))

6
মনে রাখবেন, এই কোড নিয়ে এসেছে NULLযদি একটি স্ট্রিং, যাতে নির্দিষ্ট ডিলিট সীমার চেয়ে খাটো পাস STUFFISNULLখালি স্ট্রিংয়ের ক্ষেত্রে পৃথক আউটপুট মান পেতে এটি একটিতে মুড়িয়ে দিন ।
রোজওয়েল

11
সুন্দর, এটি একটি এক্সপ্লোর পরিচালনা কমা নির্মূল করতে এক্সএমএল পাথ ('') এর সাথে একটি বহিরাগত প্রয়োগের সাথে ব্যবহার করে। অসাধারণ
ট্র্যাকার 1

@ ট্র্যাকার 1 এর মতোই। LEN () এর সাথে জড়িত কোনও কিছুর বিপরীতে এই খালি স্ট্রিংয়ের জন্য (বিশেষত ISNULL () এ মোড়ানো) কাজ করার জন্য (কোনও কিছুর পুনরাবৃত্তি না করে) দুর্দান্তভাবে কাজ করে
গ্রেগম্যাক

কখনও কখনও এসকিউএল কতটা নির্মম হতে পারে তা সত্যিই লক্ষণীয়। এই অবিশ্বাস্য.
eouw0o83hf

ধন্যবাদ, এটি আমাকে সহায়তা করেছিল, আমার ক্ষেত্রে আমার শেষ স্থান ছিল তাই প্রথম সূচকটি 2select reverse(stuff(reverse('a,b,c,d,'), 2, 1, ''))
আর্ঙ্গে

52

এটা চেষ্টা কর:

select substring('test string', 1, (len('test string') - 1))

@ অ্যাড্রিয়েন কোন ধারণা কেন এটি একই ফলাফল হিসাবে মনে হয় select substring('test string', 0, len('test string'))?
লুই ওয়াওয়ারু 23'13

@Louis, সাবস্ট্রিং সিনট্যাক্স নিম্নরূপ হয়: SUBSTRING ( expression ,start , length )। এখন, উভয় কোয়েরি একইরূপে ফিরে আসে কারণ সংখ্যাটি 1 ভিত্তিক, যার অর্থ হল এক্সপ্রেশনটির প্রথম অক্ষর 1 1. উত্স
জেএস 5

26

যদি আপনার স্ট্রিং খালি থাকে,

DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)

তারপরে এই কোডটি ত্রুটির বার্তা তৈরি করবে 'অবৈধ দৈর্ঘ্যের প্যারামিটারটি সাবস্ট্রিং ফাংশনে পাস হয়েছে।'

আপনি এটি এইভাবে পরিচালনা করতে পারেন:

SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))

এটি সর্বদা ফলাফল, এবং খালি স্ট্রিংয়ের ক্ষেত্রে NULL প্রদান করবে।



9

উত্স পাঠ / ভের নাল বা খালি থাকলেও এটি কাজ করবে:

SELECT REVERSE(SUBSTRING(REVERSE(@a), 2, 9999))

2
এটি একটি আন্ডাররেটেড মন্তব্য, এটি দ্রুত এবং এটির জন্য দু'বার স্ট্রিংটি নির্বাচন করতে হবে না।
র্যান্ডাল

7

যদি আপনার কলোন হয় textএবং না হয় varcharতবে আপনি এটি ব্যবহার করতে পারেন:

SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))

5

আপনি যদি REVERSE-STUFF-REVERSE এর তিনটির পরিবর্তে দুটি পদক্ষেপে এটি করতে চান তবে আপনার তালিকার বিভাজকটি এক বা দুটি স্পেসে থাকতে পারেন। তারপরে ট্রেলিং স্পেসগুলি ছাঁটাতে আরটিআরআইএম ব্যবহার করুন এবং ',' দিয়ে ডাবল স্পেসগুলি প্রতিস্থাপনের জন্য পুনরায় প্রতিস্থাপন করুন

select REPLACE(RTRIM('a  b  c  d  '),'  ', ', ')

তবে, যদি আপনার মূল স্ট্রিংটিতে অভ্যন্তরীণ জায়গা থাকতে পারে তবে এটি ভাল ধারণা নয়।

পারফরম্যান্স সম্পর্কে নিশ্চিত না। প্রতিটি REVERSE স্ট্রিংয়ের একটি নতুন অনুলিপি তৈরি করে তবে STUFF REPLACE এর চেয়ে তৃতীয় দ্রুত।

আরো দেখুন এই




2

আপনি ফাংশন তৈরি করতে পারেন

CREATE FUNCTION [dbo].[TRUNCRIGHT] (@string NVARCHAR(max), @len int = 1)
RETURNS NVARCHAR(max)
AS
BEGIN
    IF LEN(@string)<@len
        RETURN ''
    RETURN LEFT(@string, LEN(@string) - @len)
END


2

শেষ চরিত্রটি পান

Right(@string, len(@String) - (len(@String) - 1))

আমি মনে করি না এটি তিনি যা জিজ্ঞাসা করেছিলেন, যদিও - এটি কোনও মন্তব্যে রাখা দরকারী হতে পারে।
জিমওয়াইজ

3
ঠিক ডান (@ স্ট্রিং, 1)।
গোলবেসড

1

আমার উত্তর গৃহীত উত্তরের মতো, তবে এটি নাল এবং খালি স্ট্রিংয়ের জন্যও পরীক্ষা করে।

DECLARE @String VARCHAR(100)

SET @String = 'asdfsdf1'

-- If string is null return null, else if string is empty return as it is, else chop off the end character
SET @String = Case @String when null then null else (case LEN(@String) when 0 then @String else LEFT(@String, LEN(@String) - 1) end ) end

SELECT @String

1

এটি বেশ দেরিতে হলেও আকর্ষণীয়ভাবে এখনও কখনও উল্লেখ করা হয়নি।

select stuff(x,len(x),1,'')

অর্থাৎ,

take a string x
go to its last character
remove one character
add nothing

0

আমি @ বিল-হোইনিগের উত্তর পছন্দ করি; যাইহোক, আমি একটি সাবকোয়ারি ব্যবহার করছিলাম এবং আমি আটকে গেলাম কারণ রেভার্স ফাংশনে দুটি সেট বন্ধনী দুটি সেট দরকার ছিল। আমাকে কিছুটা সময় নিল!

SELECT
   -- Return comma delimited list of all payment reasons for this Visit
   REVERSE(STUFF(REVERSE((
        SELECT DISTINCT
               CAST(CONVERT(varchar, r1.CodeID) + ' - ' + c.Name + ', ' AS VARCHAR(MAX))
          FROM VisitReason r1
          LEFT JOIN ReasonCode c        ON c.ID = r1.ReasonCodeID
         WHERE p.ID = r1.PaymentID
         FOR XML PATH('')
              )), 1, 2, ''))                        ReasonCode
  FROM Payments p

আপনি কোয়েরির সংমিশ্রিত অংশের জন্য বাইরের / ক্রস প্রয়োগ করতে চাইতে পারেন। আমি এটি প্যারেন্ট আইটেমের জন্য পতাকাগুলির সেট পেতে ব্যবহার করছি।
ট্র্যাকার 1

0

একটি নির্দিষ্ট কলামের শেষ এন অক্ষর ছাঁটাই করে রেকর্ডটি আপডেট করতে:

UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName )-N) where clause

0

এটি চেষ্টা করুন:

  DECLARE @String NVARCHAR(100)
    SET @String = '12354851'
    SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))

0
declare @string varchar(20)= 'TEST STRING'
Select left(@string, len(@string)-1) as Tada

আউটপুট:

Tada
--------------------
TEST STRIN

0

এটা চেষ্টা কর,

DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames

এবং আউটপুট থ্যামিজম্যানি মত হবে


-1
declare @x varchar(20),@y varchar(20)
select @x='sam'
select 
case when @x is null then @y
      when @y is null then @x
      else @x+','+@y
end


go

declare @x varchar(20),@y varchar(20)
select @x='sam'
--,@y='john'
DECLARE @listStr VARCHAR(MAX)   

SELECT @listStr = COALESCE(@x + ', ' ,'') +coalesce(@y+',','')
SELECT left(@listStr,len(@listStr)-1)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.