Cách tốt nhất để xóa tất cả các khoảng trắng khỏi chuỗi trong SQL Server 2008 là gì?
LTRIM(RTRIM(' a b '))
sẽ xóa tất cả các khoảng trắng ở bên phải và bên trái của chuỗi, nhưng tôi cũng cần xóa khoảng trắng ở giữa.
Cách tốt nhất để xóa tất cả các khoảng trắng khỏi chuỗi trong SQL Server 2008 là gì?
LTRIM(RTRIM(' a b '))
sẽ xóa tất cả các khoảng trắng ở bên phải và bên trái của chuỗi, nhưng tôi cũng cần xóa khoảng trắng ở giữa.
Câu trả lời:
Đơn giản chỉ cần thay thế nó;
SELECT REPLACE(fld_or_variable, ' ', '')
Chỉnh sửa:
Chỉ để làm rõ; nó là sự thay thế toàn cầu, không cần phải trim()
lo lắng về nhiều không gian cho một trong hai char
hoặc varchar
:
create table #t (
c char(8),
v varchar(8))
insert #t (c, v) values
('a a' , 'a a' ),
('a a ' , 'a a ' ),
(' a a' , ' a a' ),
(' a a ', ' a a ')
select
'"' + c + '"' [IN], '"' + replace(c, ' ', '') + '"' [OUT]
from #t
union all select
'"' + v + '"', '"' + replace(v, ' ', '') + '"'
from #t
Kết quả
IN OUT
===================
"a a " "aa"
"a a " "aa"
" a a " "aa"
" a a " "aa"
"a a" "aa"
"a a " "aa"
" a a" "aa"
" a a " "aa"
REPLACE(field, ' ', '')
Đầu tiên, Tạo bảng mẫu và dữ liệu:
CREATE TABLE tbl_RemoveExtraSpaces
(
Rno INT
,Name VARCHAR(100)
)
GO
INSERT INTO tbl_RemoveExtraSpaces VALUES (1,'I am Anvesh Patel')
INSERT INTO tbl_RemoveExtraSpaces VALUES (2,'Database Research and Development ')
INSERT INTO tbl_RemoveExtraSpaces VALUES (3,'Database Administrator ')
INSERT INTO tbl_RemoveExtraSpaces VALUES (4,'Learning BIGDATA and NOSQL ')
GO
Tập lệnh để CHỌN chuỗi mà không cần thêm không gian:
SELECT
[Rno]
,[Name] AS StringWithSpace
,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
FROM tbl_RemoveExtraSpaces
Kết quả:
Rno StringWithSpace StringWithoutSpace
----------- ----------------------------------------- ---------------------------------------------
1 I am Anvesh Patel I am Anvesh Patel
2 Database Research and Development Database Research and Development
3 Database Administrator Database Administrator
4 Learning BIGDATA and NOSQL Learning BIGDATA and NOSQL
Làm việc 100%
UPDATE table_name SET "column_name"=replace("column_name", ' ', ''); //Remove white space
UPDATE table_name SET "column_name"=replace("column_name", '\n', ''); //Remove newline
UPDATE table_name SET "column_name"=replace("column_name", '\t', ''); //Remove all tab
Bạn có thể sử dụng "column_name"
hoặccolumn_name
Cảm ơn
Subroto
select replace(replace(replace(varcharColumn,char(13),''),char(10),''),' ','')
để xóa tất cả các dòng mới và khoảng trắng khỏi một varchar
cột. Nếu tôi sử dụng '\ n' và '\ r' thay vì char (13) và char (10) thì nó không hoạt động.
t-sql thay thế http://msdn.microsoft.com/en-us/l Library / ms186862.aspx
thay thế (val, '', '')
Nếu có nhiều khoảng trắng trong một chuỗi, thì thay thế có thể không hoạt động chính xác. Cho rằng, nên sử dụng chức năng sau đây.
CREATE FUNCTION RemoveAllSpaces
(
@InputStr varchar(8000)
)
RETURNS varchar(8000)
AS
BEGIN
declare @ResultStr varchar(8000)
set @ResultStr = @InputStr
while charindex(' ', @ResultStr) > 0
set @ResultStr = replace(@InputStr, ' ', '')
return @ResultStr
END
Thí dụ:
select dbo.RemoveAllSpaces('aa aaa aa aa a')
Đầu ra:
aaaaaaaaaa
Đây là thủ thuật loại bỏ khoảng trắng trên chuỗi:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
Chỉ trong trường hợp bạn cần TRIM khoảng trắng trong tất cả các cột, bạn có thể sử dụng tập lệnh này để thực hiện nó một cách linh hoạt:
--Just change table name
declare @MyTable varchar(100)
set @MyTable = 'MyTable'
--temp table to get column names and a row id
select column_name, ROW_NUMBER() OVER(ORDER BY column_name) as id into #tempcols from INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('varchar', 'nvarchar') and TABLE_NAME = @MyTable
declare @tri int
select @tri = count(*) from #tempcols
declare @i int
select @i = 0
declare @trimmer nvarchar(max)
declare @comma varchar(1)
set @comma = ', '
--Build Update query
select @trimmer = 'UPDATE [dbo].[' + @MyTable + '] SET '
WHILE @i <= @tri
BEGIN
IF (@i = @tri)
BEGIN
set @comma = ''
END
SELECT @trimmer = @trimmer + CHAR(10)+ '[' + COLUMN_NAME + '] = LTRIM(RTRIM([' + COLUMN_NAME + ']))'+@comma
FROM #tempcols
where id = @i
select @i = @i+1
END
--execute the entire query
EXEC sp_executesql @trimmer
drop table #tempcols
nếu bạn muốn xóa khoảng trắng, - và một văn bản khác khỏi chuỗi thì hãy sử dụng như sau:
giả sử bạn có số điện thoại trong Bảng như '718-378-4957' hoặc '7183784957' và bạn muốn thay thế và lấy số điện thoại sau đó sử dụng Văn bản sau.
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
Kết quả: - 7183784957
Để hoàn thành tất cả các câu trả lời ở trên, có các bài đăng bổ sung trên StackOverflow về cách xử lý TẤT CẢ các ký tự khoảng trắng (xem https://en.wikipedia.org/wiki/Whitespace_character để biết danh sách đầy đủ các ký tự này):
thay thế (thay thế (cột_Name, CHAR (13), ''), CHAR (10), '')
Điều này hữu ích cho tôi:
CREATE FUNCTION dbo.TRIM(@String VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
RETURN LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,CHAR(10),'[]'),CHAR(13),'[]'),char(9),'[]'),CHAR(32),'[]'),'][',''),'[]',CHAR(32))));
END
GO
.
Tôi đã có vấn đề này ngày hôm nay và thay thế / cắt đã thực hiện các mẹo .. xem bên dưới.
update table_foo
set column_bar = REPLACE(LTRIM(RTRIM(column_bar)), ' ', '')
trước và sau :
old-bad: column_bar | New-fixed: column_bar
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
LTRIM
& RTRIM
?
Để loại bỏ khoảng trắng trong một chuỗi trái và phải. Để loại bỏ không gian ở giữa sử dụng Replace
.
Bạn có thể sử dụng RTRIM()
để xóa khoảng trắng ở bên phải và LTRIM()
xóa khoảng trắng ở bên trái do đó các khoảng trắng bên trái và bên phải được xóa như sau:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
Một phiên bản chức năng (udf) loại bỏ khoảng trắng, cr, lf, tab hoặc cấu hình.
select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S
Kết quả: '234asdfwefwef3x'
alter function Common.RemoveWhitespace
(
@pString nvarchar(max),
@pWhitespaceCharsOpt nvarchar(max) = null -- default: tab, lf, cr, space
)
returns nvarchar(max) as
/*--------------------------------------------------------------------------------------------------
Purpose: Compress whitespace
Example: select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as s
-- Result: 234asdfwefwef3x
Modified By Description
---------- ----------- --------------------------------------------------------------------
2018.07.24 crokusek Initial Version
--------------------------------------------------------------------------------------------------*/
begin
declare
@maxLen bigint = 1073741823, -- (2^31 - 1) / 2 (https://stackoverflow.com/a/4270085/538763)
@whitespaceChars nvarchar(30) = coalesce(
@pWhitespaceCharsOpt,
char(9) + char(10) + char(13) + char(32)); -- tab, lf, cr, space
declare
@whitespacePattern nvarchar(30) = '%[' + @whitespaceChars + ']%',
@nonWhitespacePattern nvarchar(30) = '%[^' + @whitespaceChars + ']%',
@previousString nvarchar(max) = '';
while (@pString != @previousString)
begin
set @previousString = @pString;
declare
@whiteIndex int = patindex(@whitespacePattern, @pString);
if (@whiteIndex > 0)
begin
declare
@whitespaceLength int = nullif(patindex(@nonWhitespacePattern, substring(@pString, @whiteIndex, @maxLen)), 0) - 1;
set @pString =
substring(@pString, 1, @whiteIndex - 1) +
iif(@whiteSpaceLength > 0, substring(@pString, @whiteIndex + @whiteSpaceLength, @maxLen), '');
end
end
return @pString;
end
go
Vì một số lý do, việc thay thế chỉ hoạt động với một chuỗi mỗi lần. Tôi đã có một chuỗi như thế này " Test MSP " và tôi chỉ muốn để lại một khoảng trống.
Tôi đã sử dụng cách tiếp cận mà @Farhan đã làm, nhưng với một số sửa đổi:
CREATE FUNCTION ReplaceAll
(
@OriginalString varchar(8000),
@StringToRemove varchar(20),
@StringToPutInPlace varchar(20)
)
RETURNS varchar(8000)
AS
BEGIN
declare @ResultStr varchar(8000)
set @ResultStr = @OriginalString
while charindex(@StringToRemove, @ResultStr) > 0
set @ResultStr = replace(@ResultStr, @StringToRemove, @StringToPutInPlace)
return @ResultStr
END
Sau đó, tôi chạy bản cập nhật của mình như thế này
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, ' ', ' ') WHERE ID = 14225
Sau đó tôi nhận được kết quả này: Kiểm tra MSP
Đăng ở đây nếu trong trường hợp ai đó cần nó như tôi đã làm.
Chạy trên: Microsoft SQL Server 2016 (SP2)
Kiểm tra và thử đoạn script dưới đây (Đơn vị đã kiểm tra) -
--Declaring
DECLARE @Tbl TABLE(col_1 VARCHAR(100));
--Test Samples
INSERT INTO @Tbl (col_1)
VALUES
(' EY y
Salem')
, (' EY P ort Chennai ')
, (' EY Old Park ')
, (' EY ')
, (' EY ')
,(''),(null),('d
f');
SELECT col_1 AS INPUT,
LTRIM(RTRIM(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(col_1,CHAR(10),' ')
,CHAR(11),' ')
,CHAR(12),' ')
,CHAR(13),' ')
,CHAR(14),' ')
,CHAR(160),' ')
,CHAR(13)+CHAR(10),' ')
,CHAR(9),' ')
,' ',CHAR(17)+CHAR(18))
,CHAR(18)+CHAR(17),'')
,CHAR(17)+CHAR(18),' ')
)) AS [OUTPUT]
FROM @Tbl;
Dường như mọi người cứ nhắc đến một chức năng REPLACE duy nhất. Hoặc thậm chí nhiều cuộc gọi của chức năng REPLACE. Nhưng khi bạn có đầu ra động với một số lượng không gian không xác định, nó sẽ không hoạt động. Bất cứ ai thường xuyên xử lý vấn đề này đều biết rằng REPLACE sẽ chỉ xóa một khoảng trống, KHÔNG PHẢI TẤT CẢ, như bình thường. Và LTRIM và RTRIM dường như có cùng một vấn đề. Để lại cho Microsoft. Đây là một đầu ra mẫu sử dụng Vòng lặp WHILE để loại bỏ TẤT CẢ (32) giá trị (khoảng trắng).
DECLARE @INPUT_VAL VARCHAR(8000)
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @INPUT_VAL = ' C A '
SET @OUTPUT_VAL = @INPUT_VAL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
PRINT 'START:' + @INPUT_VAL + ':END'
PRINT 'START:' + @OUTPUT_VAL + ':END'
Đây là đầu ra của đoạn mã trên:
START: C A :END
START:CA:END
Bây giờ để tiến thêm một bước và sử dụng nó trong câu lệnh CẬP NHẬT hoặc CHỌN, hãy thay đổi nó thành udf.
CREATE FUNCTION udf_RemoveSpaces (@INPUT_VAL VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @OUTPUT_VAL = @INPUT_VAL
-- ITTERATE THROUGH STRING TO LOOK FOR THE ASCII VALUE OF SPACE (CHAR(32)) REPLACE IT WITH BLANK, NOT NULL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
RETURN @OUTPUT_VAL
END
Sau đó sử dụng hàm trong câu lệnh CHỌN hoặc CHERTN:
UPDATE A
SET STATUS_REASON_CODE = WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE
INSERT INTO SOMETABLE
(STATUS_REASON_CODE)
SELECT WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE