什么是从SQL Server 2008中的字符串中删除所有空间的最佳方式?
LTRIM(RTRIM(' ab '))
将删除所有空格在右边和左边的字符串,但我还需要删除中间的空间。
什么是从SQL Server 2008中的字符串中删除所有空间的最佳方式?
LTRIM(RTRIM(' ab '))
将删除所有空格在右边和左边的字符串,但我还需要删除中间的空间。
只需更换它;
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 '% %'
REPLACE()
函数 :
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
[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
替换(VAL, '', '')
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
谢谢
Subroto
如果有多个空格的字符串,然后更换可能无法正常工作。 为此,应使用下列功能。
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
这确实消除对字符串中的空格的伎俩:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
万一你需要修剪空间中的所有列,你可以使用这个脚本来动态地做到这一点:
--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
如果你想删除空格, - ,从另一个字符串文本,然后使用下列内容:
假设你有你的表像“718-378-4957”或“7183784957”一个手机号码,你想更换,并得到那么移动电话号码使用下面的文字。
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
结果: - 7183784957
只是一个提示,如果您有替换功能麻烦,你可能有数据类型设置为nchar(在这种情况下,它是一个固定的长度,它不会工作)。
为了使上述所有完整的答案,对于如何处理所有空白字符(见StackOverflow上增设职位https://en.wikipedia.org/wiki/Whitespace_character这些字符的完整列表):
我今天有这个问题,并替换/装饰做了以下trick..see。
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'
REPLACE(替换(列名,CHAR(13), ''),CHAR(10), '')
为了消除左,右一个字符串的空间。 为了消除中间利用空间Replace
。
您可以使用RTRIM()
删除从右侧和空格LTRIM()
以去除去除如下左从而左右空间的空间:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
该方法适用于我:
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
。
语法替换特定的字符:
REPLACE ( string_expression , string_pattern , string_replacement )
例如字符串“HelloReplaceThingsGoing”替换词是如何取代
SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
GO
的功能的版本(UDF),其去除空格,CR,LF,选项卡或可配置的。
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
出于某种原因,更换工作只能每次一个字符串。 我有这样的“ 测试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)