Apa adalah cara terbaik untuk menghapus semua spasi dari string di SQL Server 2008?
LTRIM(RTRIM(' a b '))
akan menghapus semua spasi di kanan dan kiri dari string, tapi aku juga perlu untuk menghapus ruang kosong di tengah.
Cukup menggantinya;
SELECT REPLACE(fld_or_variable, ' ', '')
Edit:
Hanya untuk memperjelas; yang global ganti, ada tidak perlu untuk trim()
atau khawatir tentang beberapa ruang untuk char
atau 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
Hasil
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"
Jika itu adalah sebuah update pada sebuah tabel semua yang harus anda lakukan adalah menjalankan pembaruan ini beberapa kali sampai hal ini mempengaruhi 0 baris.
update tableName
set colName = REPLACE(LTRIM(RTRIM(colName)), ' ', ' ')
where colName like '% %'
Referensi yang diambil dari blog ini:
Pertama, Membuat contoh tabel dan data:
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
Script untuk MEMILIH string tanpa Spasi Tambahan:
SELECT
[Rno]
,[Name] AS StringWithSpace
,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
FROM tbl_RemoveExtraSpaces
Hasil:
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
100% bekerja
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
Anda dapat menggunakan "column_name"
atau column_name
Terima kasih
Subroto
Ini memang trik menghilangkan spasi pada string:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
Jika ada beberapa ruang putih dalam sebuah string, kemudian menggantikan mungkin tidak bekerja dengan benar. Untuk itu, berikut fungsi harus digunakan.
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
Contoh:
select dbo.RemoveAllSpaces('aa aaa aa aa a')
Output:
aaaaaaaaaa
Untuk membuat semua jawaban di atas selesai, ada tambahan posting di StackOverflow tentang bagaimana untuk menangani dengan SEMUA karakter spasi putih (lihat https://en.wikipedia.org/wiki/Whitespace_character untuk daftar lengkap dari karakter ini):
Hanya dalam kasus anda perlu untuk MEMANGKAS ruang di semua kolom, anda bisa menggunakan script ini untuk melakukannya secara dinamis:
--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
jika anda ingin menghapus spasi,-, dan teks lain dari string maka gunakan berikut ini :
misalkan anda memiliki nomor ponsel di Meja anda seperti '718-378-4957' atau ' 7183784957' dan anda ingin mengganti dan mendapatkan nomor ponsel kemudian gunakan Teks berikut.
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
Hasil :-- 7183784957
ini adalah berguna bagi saya:
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
.
Aku punya masalah ini hari ini dan mengganti / trim melakukan trik..lihat di bawah ini.
update table_foo
set column_bar = REPLACE(LTRIM(RTRIM(column_bar)), ' ', '')
sebelum dan sesudah :
old-bad: column_bar | New-fixed: column_bar
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
Untuk menghapus spasi dalam string kiri dan kanan. Untuk menghapus ruang di tengah menggunakan Menggantikan
.
Anda dapat menggunakan RTRIM()
untuk menghapus spasi dari kanan dan LTRIM()
untuk menghapus spasi dari kiri oleh karena itu kiri dan kanan ruang dihapus sebagai berikut:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
Sintaks untuk mengganti karakter tertentu:
REPLACE ( string_expression , string_pattern , string_replacement )
Misalnya dalam string "HelloReplaceThingsGoing" Mengganti kata tersebut diganti dengan Cara
SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
GO
Sebuah versi fungsional (udf) yang menghilangkan spasi, cr, lf, tab atau dikonfigurasi.
select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S
Hasil: '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
Untuk beberapa alasan, mengganti bekerja hanya dengan satu string setiap waktu. Aku punya string seperti ini "Test MSP" dan aku ingin meninggalkan hanya satu ruang.
Saya menggunakan pendekatan yang @Farhan, tetapi dengan beberapa modifikasi:
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
Kemudian saya menjalankan update saya seperti ini
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, ' ', ' ') WHERE ID = 14225
Kemudian saya mendapat hasil seperti ini: Tes MSP
Posting di sini jika dalam kasus seseorang yang membutuhkan itu seperti yang saya lakukan.
Berjalan pada: Microsoft SQL Server 2016 (SP2)