Làm cách nào để xóa ký tự cuối cùng trong một chuỗi trong T-SQL
?Xóa ký tự cuối cùng trong một chuỗi trong T-SQL?
Ví dụ:
'TEST STRING'
trở lại:
'TEST STRIN'
Làm cách nào để xóa ký tự cuối cùng trong một chuỗi trong T-SQL
?Xóa ký tự cuối cùng trong một chuỗi trong T-SQL?
Ví dụ:
'TEST STRING'
trở lại:
'TEST STRIN'
ví dụ
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
Hãy thử điều này:
select substring('test string', 1, (len('test string') - 1))
@Adrien bất kỳ ý tưởng tại sao điều này dường như cho kết quả tương tự như 'chọn chuỗi con ('chuỗi kiểm tra', 0, len ('chuỗi kiểm tra'))'? – Louis
Nếu vì một số lý do lý cột của bạn là phức tạp (trường hợp khi ... sau đó ... else ... end), sau đó các giải pháp trên làm cho bạn phải lặp lại cùng một logic trong hàm len(). Nhân đôi cùng một logic trở thành một mớ hỗn độn. Nếu đây là trường hợp thì đây là một giải pháp đáng chú ý. Ví dụ này loại bỏ dấu phẩy không mong muốn cuối cùng. Cuối cùng tôi đã tìm thấy một sử dụng cho hàm REVERSE.
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
Lưu ý rằng mã này trả về 'NULL' nếu truyền một chuỗi ngắn hơn phạm vi xóa được chỉ định cho' STUFF'. Quấn nó trong một 'ISNULL' để có được một giá trị đầu ra khác nhau cho trường hợp chuỗi rỗng. – Rozwel
Tốt đẹp, sử dụng tính năng này với lớp ngoài được áp dụng, với đường dẫn xml ('') để loại bỏ dấu phẩy sau. awseome – Tracker1
Cũng giống như cách @ Tracker1. Không giống như bất kỳ thứ gì liên quan đến LEN(), nó làm việc một cách duyên dáng (không lặp lại bất kỳ thứ gì) cho chuỗi rỗng (đặc biệt là trong ISNULL()) – gregmac
Nếu chuỗi của bạn là trống rỗng,
DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)
sau đó mã này sẽ gây ra thông báo lỗi 'tham số chiều dài không hợp lệ truyền cho hàm substring.'
Bạn có thể xử lý nó theo cách này:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
Nó sẽ luôn luôn trả về kết quả, và NULL trong trường hợp chuỗi rỗng.
Nếu coloumn của bạn là text
và không varchar
, sau đó bạn có thể sử dụng này:
SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
Tôi yêu @ câu trả lời hóa đơn Hoenig 's; tuy nhiên, tôi đã sử dụng truy vấn con và tôi bị bắt vì hàm REVERSE cần hai bộ ngoặc đơn. Đã cho tôi một thời gian để tìm ra điều đó!
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
Bạn có thể muốn sử dụng một/chéo chéo áp dụng cho phần tổng hợp của truy vấn. Tôi đang sử dụng điều này để có được một bộ cờ cho một mục cha. – Tracker1
Nếu bạn muốn thực hiện việc này theo hai bước, thay vì ba bước REVERSE-STUFF-REVERSE, bạn có thể có dấu tách danh sách của bạn là một hoặc hai dấu cách. Sau đó sử dụng RTRIM để cắt dấu không gian, và REPLACE để thay thế khoảng trống đôi với ''
select REPLACE(RTRIM('a b c d '),' ', ', ')
Tuy nhiên, đây không phải là một ý tưởng tốt nếu chuỗi ban đầu của bạn có thể chứa khoảng trắng bên trong.
Không chắc chắn về hiệu suất. Mỗi REVERSE tạo một bản sao mới của chuỗi, nhưng STUFF nhanh hơn REPLACE thứ ba.
cũng thấy this
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+','[email protected]
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)
Tôi nghĩ rằng các câu trả lời hiện có đã bao gồm phương pháp này. – Sam
bạn có thể tạo chức năng
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
Câu trả lời của tôi tương tự như câu trả lời được chấp nhận, nhưng nó cũng kiểm tra Chuỗi rỗng và trống.
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
Để cập nhật các bản ghi bằng cách cắt tỉa N ký tự cuối cùng của một cột cụ thể:
UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName)-N) where clause
Try It:
DECLARE @String NVARCHAR(100)
SET @String = '12354851'
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
declare @string varchar(20)= 'TEST STRING'
Select left(@string, len(@string)-1) as Tada
đầu ra:
Tada
--------------------
TEST STRIN
select left('TEST STRING', len('TEST STRING')-1)
Hãy thử điều này
DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'
SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
Hãy thử điều này,
DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames
Và kết quả sẽ như thế nào, THAMIZHMANI
@result = substring(@result, 1, (LEN(@result)-1))
Tôi có thể đề nghị -hack- này;).
select
left(txt, abs(len(txt + ',') - 2))
from
t;
Hoặc: CHỌN LEFT (YourColumnName, LEN (YourColumnName) - 1) TỪ YourTable –
Lưu ý, điều này ném một lỗi nếu chuỗi của bạn là trống rỗng. – gregmac
Cảm ơn bạn đã nắm bắt null - ISNULL (LEFT (@String, LEN (@String) - 1), 'ErrMsg') sẽ giải quyết – Volvox