जवाबों:
जैसे
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
यदि किसी कारण से आपका कॉलम लॉजिक जटिल है (जब ... तब ... और ... अंत), तो उपरोक्त समाधानों के कारण आपको लेन () फ़ंक्शन में उसी तर्क को दोहराना होगा। उसी तर्क की नकल करना एक गड़बड़ हो जाता है। अगर ऐसा है तो यह ध्यान देने योग्य उपाय है। यह उदाहरण अंतिम अवांछित अल्पविराम से छुटकारा दिलाता है। मैंने आखिरकार REVERSE फ़ंक्शन के लिए एक उपयोग पाया।
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
NULLयदि स्ट्रिंग को पास करता है जो कि निर्दिष्ट डिलीट रेंज से कम है STUFF। ISNULLखाली स्ट्रिंग मामले के लिए एक अलग आउटपुट मान प्राप्त करने के लिए इसे लपेटें ।
select reverse(stuff(reverse('a,b,c,d,'), 2, 1, ''))
इसे इस्तेमाल करे:
select substring('test string', 1, (len('test string') - 1))
select substring('test string', 0, len('test string'))?
SUBSTRING ( expression ,start , length )। अब, दोनों प्रश्न समान हैं क्योंकि अंकन 1 आधारित है, जिसका अर्थ है कि अभिव्यक्ति में पहला वर्ण 1 है। यदि प्रारंभ 1 से कम है, तो लौटा हुआ अभिव्यक्ति पहले वर्ण में शुरू होगा जो अभिव्यक्ति में निर्दिष्ट है। स्रोत
यदि आपका तार खाली है,
DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)
तब यह कोड त्रुटि संदेश का कारण बनेगा 'घटता समारोह में अमान्य लंबाई पैरामीटर।'
आप इसे इस तरह से संभाल सकते हैं:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
यह हमेशा परिणाम लौटाएगा, और रिक्त स्ट्रिंग के मामले में NULL।
यदि आपका कोलम textनहीं है varchar, तो आप इसका उपयोग कर सकते हैं:
SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
यदि आप REVERSE-STUFF-REVERSE के तीन के बजाय दो चरणों में यह करना चाहते हैं, तो आप अपनी सूची विभाजक एक या दो रिक्त स्थान हो सकते हैं। फिर RTRIM का उपयोग ट्रेलिंग स्पेस को ट्रिम करने के लिए करें, और डबल स्पेस को ',' से बदलने के लिए REPLACE का उपयोग करें।
select REPLACE(RTRIM('a b c d '),' ', ', ')
हालांकि, यह एक अच्छा विचार नहीं है यदि आपके मूल स्ट्रिंग में आंतरिक स्थान हो सकते हैं।
प्रदर्शन के बारे में निश्चित नहीं है। प्रत्येक REVERSE स्ट्रिंग की एक नई प्रतिलिपि बनाता है, लेकिन STUFF REPLACE की तुलना में तीसरा तेज़ है।
यह भी देखना यह
@result = substring(@result, 1, (LEN(@result)-1))
मैं यह सुझाव दे सकता हूँ -एक;);
select
left(txt, abs(len(txt + ',') - 2))
from
t;
आप फ़ंक्शन बना सकते हैं
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
इसे इस्तेमाल करे
DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'
SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
अंतिम चरित्र प्राप्त करें
Right(@string, len(@String) - (len(@String) - 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
यह काफी देर से है, लेकिन दिलचस्प रूप से अभी तक कभी उल्लेख नहीं किया गया है।
select stuff(x,len(x),1,'')
अर्थात:
take a string x
go to its last character
remove one character
add nothing
मुझे @ बिल-होनिग का उत्तर पसंद है; हालाँकि, मैं एक उपश्रेणी का उपयोग कर रहा था और मैं पकड़ा गया क्योंकि REVERSE फ़ंक्शन को कोष्ठकों के दो सेटों की आवश्यकता थी। मुझे यह पता लगाने में थोड़ा समय लगा कि एक बाहर!
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
किसी विशेष कॉलम के अंतिम N अक्षरों को ट्रिम करके रिकॉर्ड को अपडेट करने के लिए:
UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName )-N) where clause
इसे इस्तेमाल करे,
DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames
और आउटपुट, THAMIZHMANI की तरह होगा
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)