287

SQL Server 2008 で文字列からすべてのスペースを削除する最良の方法は何ですか?

LTRIM(RTRIM(' a b '))文字列の左右のスペースをすべて削除しますが、真ん中のスペースも削除する必要があります。

4

24 に答える 24

483

交換するだけです。

SELECT REPLACE(fld_or_variable, ' ', '')

編集: 明確にするために。これはグローバルな置換であり、 または のいずれかに複数のスペースを使用する必要はなく、trim()心配する必要もありません。charvarchar

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"
于 2012-05-03T13:11:44.833 に答える
47

REPLACEを使用します

select REPLACE (' Hello , How Are You ?', ' ', '' )

交換

于 2012-05-03T13:12:15.220 に答える
18

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

ありがとう

サブロト

于 2016-07-28T12:53:12.993 に答える
16

REPLACE()機能:

REPLACE(field, ' ', '')
于 2012-05-03T13:13:29.780 に答える
9

t-sql はhttp://msdn.microsoft.com/en-us/library/ms186862.aspxを置き換えます

replace(val, ' ', '')

于 2012-05-03T13:12:54.900 に答える
7

文字列に複数の空白がある場合、置換が正しく機能しない可能性があります。そのためには、次の関数を使用する必要があります。

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
于 2012-07-20T15:39:39.853 に答える
2

ヒントとして、replace 関数で問題が発生した場合は、データ型を nchar に設定している可能性があります (この場合は固定長であり、機能しません)。

于 2016-12-20T20:08:18.227 に答える
0

文字列の左右のスペースを削除します。中間使用でスペースを削除しますReplace

RTRIM()右からスペースを削除し、左からスペースを削除するために使用できるためLTRIM()、次のように左右のスペースが削除されます。

SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
于 2015-08-13T04:43:38.237 に答える
-1

誰もが単一の REPLACE 関数を参照し続けているようです。または、REPLACE 関数を何度も呼び出します。ただし、スペースの数が不明な動的出力がある場合は、機能しません。この問題に定期的に対処する人なら誰でも、REPLACE が 1 つのスペースのみを削除し、すべてを削除するわけではないことを知っています。また、LTRIM と RTRIM にも同じ問題があるようです。マイクロソフトにお任せください。以下は、WHILE ループを使用してすべての 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
于 2019-08-20T17:36:26.740 に答える