SQL Server 문자열에서 모든 공간 제거
SQL Server 2008에서 문자열에서 모든 공간을 제거하는 가장 좋은 방법은 무엇입니까?
LTRIM(RTRIM(' a b '))
문자열의 오른쪽과 왼쪽에 있는 모든 공백을 제거합니다.단, 중간에 있는 공백도 제거해야 합니다.
교환만 하면 됩니다.
SELECT REPLACE(fld_or_variable, ' ', '')
편집: 명확하게 하기 위해서입니다.글로벌 치환이기 때문에trim()
수 .char
★★★★★★★★★★★★★★★★★」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
결과
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를 사용하고 싶다.
select REPLACE (' Hello , How Are You ?', ' ', '' )
테이블 업데이트인 경우 이 업데이트를 0 행에 영향을 줄 때까지 여러 번 실행하면 됩니다.
update tableName
set colName = REPLACE(LTRIM(RTRIM(colName)), ' ', ' ')
where colName like '% %'
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
하시면 됩니다."column_name"
★★★★★★★★★★★★★★★★★」column_name
감사해요.
서브로토
REPLACE(field, ' ', '')
먼저 샘플 테이블과 데이터를 만듭니다.
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
추가 공간 없이 SELECT 문자열에 스크립트:
SELECT
[Rno]
,[Name] AS StringWithSpace
,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
FROM tbl_RemoveExtraSpaces
결과:
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
t-sql은 http://msdn.microsoft.com/en-us/library/ms186862.aspx을 대체합니다.
replace(val, ', ')
이렇게 하면 문자열의 공백이 삭제됩니다.
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
문자열에 공백이 여러 개 있는 경우 치환 기능이 제대로 작동하지 않을 수 있습니다.이를 위해 다음과 같은 기능을 사용해야 합니다.
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
예:
select dbo.RemoveAllSpaces('aa aaa aa aa a')
출력:
aaaaaaaaaa
replace(replace(column_Name,CHAR(13),''),CHAR(10),'')
LTRM 또는 RTRM에 의해 일반 공간이 제거되지 않은 경우 다음과 같이 사용해 보십시오.
LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(Column_data, CHAR(9), ''), CHAR(10), ''), CHAR(13), '')))
모든 열의 공간을 TRIM해야 하는 경우 이 스크립트를 사용하여 동적으로 수행할 수 있습니다.
--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
위의 모든 답변을 완료하기 위해 StackOverflow에 모든 공백 문자를 처리하는 방법에 대한 추가 게시물이 있습니다(이러한 문자의 전체 목록은 https://en.wikipedia.org/wiki/Whitespace_character 참조).
- TSQL 2008에서 LTrim(RTrim)을 사용하고 있으며 데이터에는 아직 공간이 있습니다.
- SQL Server의 컬럼에서 공백이 없는 공간을 삭제하려면 어떻게 해야 합니까?
- UDF와 CLR을 사용하지 않고 T-SQL 문자열에서 공백 문자를 모두 잘라내는 좋은 방법은 무엇입니까?
이것은 나에게 도움이 된다.
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
.
문자열에서 공백, - 및 다른 텍스트를 삭제하려면 다음 명령을 사용합니다.
표에 '718-378-4957' 또는 '7183784957'과 같은 휴대 전화 번호가 있고 해당 휴대 전화 번호를 교체하고 받은 후 다음 텍스트를 사용한다고 가정합니다.
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
결과:-- 7183784957
힌트입니다만, 치환 기능에 문제가 있는 경우는, 데이터 타입을 nchar 로 설정할 수 있습니다(이 경우는 고정 길이이므로 동작하지 않습니다).
오늘 이 문제가 발생했는데 교체/트림이 효과가 있었습니다.를 참조해 주세요.
update table_foo
set column_bar = REPLACE(LTRIM(RTRIM(column_bar)), ' ', '')
이전과 이후:
old-bad: column_bar | New-fixed: column_bar
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
아래 스크립트를 체크하여 시험해 봅니다(테스트 대상 유닛).
--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;
문자열의 왼쪽과 오른쪽 공백을 제거합니다.하려면 을 사용합니다.Replace
.
하시면 됩니다.RTRIM()
과 오른쪽에서 을 없애다LTRIM()
왼쪽에서 공간을 삭제하기 위해 다음과 같이 왼쪽 및 오른쪽 공간을 삭제합니다.
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
특정 문자를 바꾸기 위한 구문:
REPLACE ( string_expression , string_pattern , string_replacement )
예를 들어 "HelloReplace" 문자열은ThingsGoing"은 "How"로 대체됩니다.
SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
GO
공백, cr, lf, 탭 또는 구성 가능을 삭제하는 기능 버전(udf).
select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S
결과: '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
어떤 이유로 치환은 매번1개의 문자열로만 동작합니다."Test MSP"와 같은 문자열이 있었는데 한 칸만 남기고 싶습니다.
나는 @Farhan과 같은 접근방식을 사용했지만, 몇 가지 수정을 가했다.
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
그런 다음 이렇게 업데이트를 실행합니다.
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, ' ', ' ') WHERE ID = 14225
그리고 나는 다음과 같은 결과를 얻었다.MSP 테스트
나처럼 누군가 필요할 때를 대비해서 여기에 글을 올린다.
실행 중: Microsoft SQL Server 2016 (SP2)
원래 질문은 단순히 공백 치환에 관한 것이었지만, 모든 공백을 치환해야 할 경우에는 (Sql Server 2019 이후) TRANSTRAL 기능을 사용하여 주어진 문자 목록을 치환하기 쉬운 것으로 변환할 수 있습니다.다음으로 REPLACE 기능으로 랩합니다.
이것에 의해, 반복된 콜이 보존됩니다.
DECLARE @Whitespace CHAR(4) = CHAR(0) + CHAR(9) + CHAR(13) + CHAR(10);
SELECT REPLACE(
TRANSLATE(' TEST ', @Whitespace, ' '),
' ', '');
저는 매우 빠르지만 설치는 다소 지루하다는 솔루션을 공유합니다.Microsoft SQL Server 2008 R2(SP3)에서는 정상적으로 동작합니다.
데이터베이스가 설치된 서버에 SQL Regex 어셈블리를 설치합니다.인스톨 순서는, 다음의 링크에 있습니다.https://github.com/DevNambi/sql-server-regex#installation
데이터베이스에 함수 dbo를 만듭니다.TRIM: RegexReplace() 스칼라 함수(https://github.com/DevNambi/sql-server-regex#replace )를 기반으로 합니다.
CREATE FUNCTION [dbo].[TRIM](@text NVARCHAR(MAX))
RETURNS NVARCHAR(MAX) --WITH SCHEMABINDING
BEGIN
-- This function removes:
-- 1. invisible characters,
-- 2. repeated blank spaces and
-- 3. the spaces at the beginning and at the end of the text.
RETURN (CASE
WHEN @text is NULL
THEN NULL
ELSE
dbo.RegexReplace((dbo.RegexReplace(dbo.RegexReplace(@text, N'['+Nchar(0)+N'-'+Nchar(32)+Nchar(8192)+N'-'+Nchar(8202)+Nchar(160)+Nchar(5760)+Nchar(6158)+Nchar(8232)+Nchar(8233)+Nchar(8239)+Nchar(8287)+Nchar(65440)+Nchar(12288) +N']+', N'[}'), N'[\[\}]+', ' ')), N'^\s+|\s+$','')
END);
END
GO
....................
사용방법:
declare @txt NVARCHAR(MAX) = N' Hello,'+Nchar(12288)+N' my '+NCHAR(160)+N'name'+Nchar(0)+N' is John'+NCHAR(11)+N' Doe';
select dbo.TRIM(@txt) as Result -- Result: "Hello, my name is John Doe"
....................
업데이트:
모든 공간을 완전히 제거하려면 다음 기능을 만들 수 있습니다.
CREATE FUNCTION [dbo].[TRIM_SPACES](@text NVARCHAR(MAX))
RETURNS NVARCHAR(MAX) --WITH SCHEMABINDING
BEGIN
RETURN (CASE WHEN @text is NULL THEN NULL ELSE
dbo.RegexReplace(@text, N'['+Nchar(0)+N'-'+Nchar(32)+Nchar(8192)+N'-'+Nchar(8202)+Nchar(160)+Nchar(5760)+Nchar(6158)+Nchar(8232)+Nchar(8233)+Nchar(8239)+Nchar(8287)+Nchar(65440)+Nchar(12288) +N']+', N'')
END)
END
GO
....................
사용방법:
declare @txt NVARCHAR(MAX) = N' Hello,'+Nchar(12288)+N' my '+NCHAR(160)+N'name'+Nchar(0)+N' is John'+NCHAR(11)+N' Doe';
select dbo.TRIM_SPACES(@txt) as Result -- Result: "Hello,mynameisJohnDoe"
모든 사람이 하나의 REPLACE 함수를 계속 언급하고 있는 것 같습니다.또는 REPLACE 함수의 다수의 콜도 가능합니다.그러나 공간 수를 알 수 없는 동적 출력이 있는 경우 작동하지 않습니다.이 문제에 정기적으로 대처하는 사람은 REPLACE가 필요한 것은 1개의 공간뿐이며, 모든 공간은 삭제하지 않는다는 것을 알고 있습니다.그리고 LTRIM과 RTRIM은 같은 문제가 있는 것 같습니다.Microsoft에 맡겨주세요.다음으로 WHILE Loop을 사용하여 모든 CHAR(32) 값(스페이스)을 삭제하는 출력 예를 나타냅니다.
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'
상기 코드의 출력을 다음에 나타냅니다.
START: C A :END
START:CA:END
한 걸음 더 나아가 UPDATE 또는 SELECT 스테이트먼트에서 이를 활용하려면 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
그런 다음 SELECT 또는 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
언급URL : https://stackoverflow.com/questions/10432086/remove-all-spaces-from-a-string-in-sql-server
'programing' 카테고리의 다른 글
리모트 브랜치가 삭제된 오리진에서 가져오시겠습니까? (0) | 2023.04.17 |
---|---|
Bash 스크립트의 인스턴스가 1개만 실행되도록 하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.17 |
SQL Server에 LastIndexOf가 있습니까? (0) | 2023.04.17 |
선택적 메서드를 사용하여 프로토콜을 만드는 방법은 무엇입니까? (0) | 2023.04.17 |
iPhone TableView셀의 셀 오른쪽에 작은 화살표 추가 (0) | 2023.04.17 |