SQL Server 2008 で文字列からすべてのスペースを削除する最良の方法は何ですか?
LTRIM(RTRIM(' a b '))
文字列の左右のスペースをすべて削除しますが、真ん中のスペースも削除する必要があります。
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"
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, ' ', '')
t-sql はhttp://msdn.microsoft.com/en-us/library/ms186862.aspxを置き換えます
replace(val, ' ', '')
文字列に複数の空白がある場合、置換が正しく機能しない可能性があります。そのためには、次の関数を使用する必要があります。
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 関数で問題が発生した場合は、データ型を nchar に設定している可能性があります (この場合は固定長であり、機能しません)。
文字列の左右のスペースを削除します。中間使用でスペースを削除しますReplace
。
RTRIM()
右からスペースを削除し、左からスペースを削除するために使用できるためLTRIM()
、次のように左右のスペースが削除されます。
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
誰もが単一の 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