Supprimer tous les espaces d'une chaîne de caractères dans SQL Server
Quelle est la meilleure façon de supprimer tous les espaces d'une chaîne de caractères dans SQL Server 2008?
LTRIM(RTRIM(' a b '))
supprimerait tous les espaces à droite et à gauche de la chaîne, mais je dois également supprimer l'espace au milieu.
19 réponses
simplement le remplacer;
SELECT REPLACE(fld_or_variable, ' ', '')
Modifier
Juste pour clarifier, c'est un remplacement global, il n'y a pas besoin de trim()
ou de s'inquiéter de plusieurs espaces:
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
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'
si c'est une mise à jour sur une table tout ce que vous avez à faire est d'exécuter cette mise à jour plusieurs fois jusqu'à ce qu'elle affecte 0 lignes.
update tableName
set colName = REPLACE(LTRIM(RTRIM(colName)), ' ', ' ')
where colName like '% %'
T-sql remplacer http://msdn.microsoft.com/en-us/library/ms186862.aspx
remplacer (val,' ',")
tout D'abord, créer la table d'échantillon et les données:
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 pour sélectionner la chaîne sans espaces supplémentaires:
SELECT
[Rno]
,[Name] AS StringWithSpace
,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
FROM tbl_RemoveExtraSpaces
résultat:
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
S'il y a plusieurs espaces blancs dans une chaîne, remplacer peut ne pas fonctionner correctement. Pour cela, la fonction suivante doit être utilisée.
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
exemple:
select dbo.RemoveAllSpaces('aa aaa aa aa a')
sortie:
aaaaaaaaaa
100% travail
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
vous pouvez utiliser "column_name"
ou column_name
Merci
Subroto
ceci fait l'astuce d'enlever les espaces sur les cordes:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
juste au cas où vous avez besoin de couper les espaces dans toutes les colonnes, vous pouvez utiliser ce script pour le faire dynamiquement:
--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
si vous voulez supprimer des espaces, -, et un autre texte de la chaîne alors utiliser ce qui suit:
supposons que vous ayez un numéro de téléphone mobile dans votre Table comme "718-378-4957" ou '7183784957' et vous voulez remplacer et obtenir le numéro de mobile puis utiliser le texte suivant.
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
résultat: -- 7183784957
juste une astuce, dans le cas où vous avez des problèmes avec la fonction de remplacement, vous pourriez avoir le type de données défini à nchar (dans ce cas, il s'agit d'une longueur fixe et il ne fonctionnera pas).
pour faire toutes les réponses ci-dessus complète, il ya des messages supplémentaires sur StackOverflow sur la façon de traiter avec tous les caractères blancs Espace (voir https://en.wikipedia.org/wiki/Whitespace_character pour une liste complète de ces caractères):
j'ai eu ce problème aujourd'hui et remplacer / couper a fait l'affaire..voir ci-dessous.
update table_foo
set column_bar = REPLACE(LTRIM(RTRIM(column_bar)), ' ', '')
avant et après:
old-bad: column_bar | New-fixed: column_bar
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
pour supprimer les espaces dans une corde à gauche et à droite. Pour supprimer l'espace dans l'utilisation moyenne Replace
.
vous pouvez utiliser RTRIM()
pour supprimer des espaces à partir de la droite et LTRIM()
pour supprimer des espaces à partir de la gauche d'où les espaces à gauche et à droite supprimés comme suit:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
remplacer (remplacer (column_Name, CHAR(13),"), CHAR(10),")
c'est utile pour moi:
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
.
syntaxe pour remplacer un caractère spécifique:
REPLACE ( string_expression , string_pattern , string_replacement )
par exemple dans la chaîne de caractères "Helloreplacethingsvoing" remplacer le mot est remplacé par le texte suivant:
SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
GO
une version fonctionnelle (udf) qui supprime les espaces, cr, lf, onglets ou configurable.
select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S
résultat: '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