Quelle est la meilleure façon de supprimer tous les espaces d'une chaîne 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.
Quelle est la meilleure façon de supprimer tous les espaces d'une chaîne 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.
Réponses:
Remplacez-le simplement;
SELECT REPLACE(fld_or_variable, ' ', '')
Edit:
Juste pour clarifier; c'est un remplacement global, il n'y a pas besoin de trim()
s'inquiéter de plusieurs espaces pour char
ou 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
Résultat
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, ' ', '')
Tout d'abord, créez un exemple de table et de 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 une 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
100% de 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"
oucolumn_name
Merci
Subroto
select replace(replace(replace(varcharColumn,char(13),''),char(10),''),' ','')
pour supprimer tous les sauts de ligne et les espaces d'une varchar
colonne. Si j'ai utilisé '\ n' et '\ r' au lieu de char (13) et char (10) cela n'a pas fonctionné.
t-sql replace http://msdn.microsoft.com/en-us/library/ms186862.aspx
remplacer (val, '', '')
S'il y a plusieurs espaces blancs dans une chaîne, le remplacement 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')
Production:
aaaaaaaaaa
Cela fait l'affaire de supprimer les espaces sur les chaînes:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
Juste au cas où vous auriez besoin de TRIM 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 souhaitez supprimer des espaces, - et un autre texte de la chaîne, utilisez ce qui suit:
Supposons que vous ayez un numéro de mobile dans votre tableau comme '718-378-4957' ou '7183784957' et que vous souhaitiez remplacer et obtenir le numéro de mobile, puis utilisez le texte suivant.
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
Résultat: - 7183784957
Pour compléter toutes les réponses ci-dessus, il existe des articles supplémentaires sur StackOverflow sur la façon de gérer TOUS les espaces blancs (voir https://en.wikipedia.org/wiki/Whitespace_character pour une liste complète de ces caractères):
replace (replace (column_Name, CHAR (13), ''), CHAR (10), '')
cela m'est utile:
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
.
J'ai eu ce problème aujourd'hui et remplacer / trim 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'
LTRIM
& RTRIM
?
Pour supprimer les espaces dans une chaîne de gauche et de droite. Pour supprimer l'espace en utilisation moyenneReplace
.
Vous pouvez utiliser RTRIM()
pour supprimer les espaces de droite et LTRIM()
pour supprimer les espaces de gauche, donc les espaces gauche et droit supprimés comme suit:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
Une version fonctionnelle (udf) qui supprime les espaces, cr, lf, tabulations ou configurables.
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
Pour une raison quelconque, le remplacement ne fonctionne qu'avec une chaîne à chaque fois. J'avais une chaîne comme celle-ci " Test MSP " et je veux ne laisser qu'un seul espace.
J'ai utilisé l'approche de @Farhan, mais avec quelques modifications:
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
Ensuite, je lance ma mise à jour comme ça
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, ' ', ' ') WHERE ID = 14225
Ensuite, j'ai obtenu ce résultat: Test MSP
Publier ici si au cas où quelqu'un en aurait besoin comme moi.
Fonctionnant sur: Microsoft SQL Server 2016 (SP2)
Vérifiez et essayez le script ci-dessous (Unit Tested) -
--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;
Il semble que tout le monde continue de se référer à une seule fonction REPLACE. Ou même de nombreux appels d'une fonction REMPLACER. Mais lorsque vous avez une sortie dynamique avec un nombre inconnu d'espaces, cela ne fonctionnera pas. Quiconque traite régulièrement ce problème sait que REPLACE ne supprimera qu'un seul espace, PAS TOUS, comme il se doit. Et LTRIM et RTRIM semblent avoir le même problème. Laissez-le à Microsoft. Voici un exemple de sortie qui utilise une boucle WHILE pour supprimer TOUTES les valeurs CHAR (32) (espace).
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'
Voici la sortie du code ci-dessus:
START: C A :END
START:CA:END
Maintenant, pour aller plus loin et l'utiliser dans une instruction UPDATE ou SELECT, changez-le en 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
Utilisez ensuite la fonction dans une instruction SELECT ou 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