Apa cara terbaik untuk menghapus semua spasi dari string di SQL Server 2008?
LTRIM(RTRIM(' a b '))
akan menghapus semua spasi di kanan dan kiri string, tetapi saya juga harus menghapus spasi di tengah.
Apa cara terbaik untuk menghapus semua spasi dari string di SQL Server 2008?
LTRIM(RTRIM(' a b '))
akan menghapus semua spasi di kanan dan kiri string, tetapi saya juga harus menghapus spasi di tengah.
Jawaban:
Cukup ganti saja;
SELECT REPLACE(fld_or_variable, ' ', '')
Sunting:
Hanya untuk memperjelas; itu adalah pengganti global, tidak perlu trim()
atau khawatir tentang beberapa ruang untuk salah satu 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"
REPLACE(field, ' ', '')
Referensi diambil dari blog ini:
Pertama, Buat tabel sampel 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 ke SELECT string tanpa Spaces Ekstra:
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% berfungsi
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 bisa menggunakan "column_name"
ataucolumn_name
Terima kasih
Subroto
select replace(replace(replace(varcharColumn,char(13),''),char(10),''),' ','')
untuk menghapus semua baris dan spasi baru dari varchar
kolom. Jika saya menggunakan '\ n' dan '\ r' alih-alih char (13) dan char (10) tidak berfungsi.
t-sql ganti http://msdn.microsoft.com/en-us/library/ms186862.aspx
ganti (val, '', '')
Jika ada beberapa spasi putih dalam sebuah string, maka ganti mungkin tidak berfungsi dengan benar. Untuk itu, fungsi berikut 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')
Keluaran:
aaaaaaaaaa
Ini melakukan trik menghilangkan spasi pada string:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
Untuk berjaga-jaga jika Anda perlu TRIM spasi di semua kolom, Anda dapat menggunakan skrip 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 kemudian gunakan berikut ini:
misalkan Anda memiliki nomor ponsel di Tabel 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
Hanya tip, jika Anda mengalami masalah dengan fungsi ganti, Anda mungkin memiliki set data tipe ke nchar (dalam hal ini itu adalah panjang tetap dan tidak akan berfungsi).
Untuk menyelesaikan semua jawaban di atas, ada posting tambahan di StackOverflow tentang cara menangani SEMUA karakter spasi putih (lihat https://en.wikipedia.org/wiki/Whitespace_character untuk daftar lengkap karakter ini):
ganti (ganti (column_Name, CHAR (13), ''), CHAR (10), '')
ini 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
.
Saya memiliki masalah ini hari ini dan ganti / trim lakukan triknya .. lihat di bawah.
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'
LTRIM
& RTRIM
?
Untuk menghapus spasi di string ke kiri dan ke kanan. Untuk menghapus ruang di tengah digunakan Replace
.
Anda dapat menggunakan RTRIM()
untuk menghapus spasi dari kanan dan LTRIM()
untuk menghapus spasi dari kiri maka spasi kiri dan kanan dihapus sebagai berikut:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
Versi fungsional (udf) yang menghilangkan spasi, cr, lf, tab atau dapat 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, penggantian hanya berfungsi dengan satu string setiap kali. Saya memiliki string seperti ini " Tes MSP " dan saya ingin hanya menyisakan satu ruang.
Saya menggunakan pendekatan yang @Farhan lakukan, 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
Lalu saya menjalankan pembaruan saya seperti ini
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, ' ', ' ') WHERE ID = 14225
Lalu saya mendapat hasil ini: Tes MSP
Posting di sini jika seandainya seseorang membutuhkannya seperti saya.
Berjalan di: Microsoft SQL Server 2016 (SP2)
Periksa dan Coba skrip di bawah ini (Unit Diuji) -
--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;
Tampaknya semua orang terus mengacu pada fungsi REPLACE tunggal. Atau bahkan banyak panggilan fungsi REPLACE. Tetapi ketika Anda memiliki output dinamis dengan jumlah ruang yang tidak diketahui, itu tidak akan berfungsi. Siapa pun yang berurusan dengan masalah ini secara teratur tahu bahwa REPLACE hanya akan menghapus satu ruang, BUKAN SEMUA, sebagaimana mestinya. Dan LTRIM dan RTRIM tampaknya memiliki masalah yang sama. Serahkan pada Microsoft. Berikut adalah contoh output yang menggunakan WHILE Loop untuk menghapus nilai ALL CHAR (32) (spasi).
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'
Inilah output dari kode di atas:
START: C A :END
START:CA:END
Sekarang untuk mengambil langkah lebih lanjut dan menggunakannya dalam pernyataan UPDATE atau SELECT, ubah ke 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
Kemudian gunakan fungsi dalam pernyataan SELECT atau INSERT:
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