【解決方法】SQLクエリを使用して単語間のスペースを削除する

[ad_1]

こんにちは、
2つの列を単一の列として追加することにより、データベースからデータをフェッチしています。フェッチされた列には、単語の間に多くのスペースがあるため、単一のスペースを除いてスペースを削除する方法、

私のクエリは次のようになります。

SQL
select Pers_FirstName + Pers_LastName as Name from Person inner join PhoneLink on Pers_PersonId=PLink_RecordID inner join Phone on Phon_PhoneId=PLink_PhoneId and Phon_Number='6983000';

出力:
名前
ピーター・ジャクソン

前もって感謝します。

編集:タイプミス

解決策 2

キングフィッシャーの答えに追加するには、複数のスペースが単一のテキスト列内にある場合、および/または単一のスペースを残したい場合は、次を使用します 交換[^] 関数。 次の例を検討してください

SQL
SELECT REPLACE('A B'  , '  ', ' ');
SELECT REPLACE('A  B' , '  ', ' ');;

問題は、2 つ以上のスペースがある場合、REPLACE は二重のスペースを 1 回だけ置換することです。 このために、小さな UDF を作成するか、必要な回数だけ REPLACE を繰り返すことができます。 例えば

SQL
SELECT REPLACE( REPLACE( REPLACE('A     B', '    ', ' '), '   ', ' '), '  ', ' ');

解決策 3

解決策 2 提供者 ミカ・ウェンデリウス[^] とても良い。 私は使用することを提案します CTE[^]:

SQL
DECLARE @tmp TABLE(MyText VARCHAR(500))

INSERT INTO @tmp (MyText)
VALUES('This    is      very  strange      text...'),
('This    is   another   very  strange      text.'),
('This    is      very  stupid      text   !!!')

DECLARE @words TABLE(RowNo INT, PartNo INT, MyWord VARCHAR(255))

;WITH CTE AS
(
	SELECT ROW_NUMBER() OVER(ORDER BY MyText) AS RowNo, 1 AS PartNo, LEFT(LTRIM(MyText), CHARINDEX(' ', LTRIM(MyText))-1) AS MyWord, RIGHT(LTRIM(MyText), LEN(LTRIM(MyText)) - CHARINDEX(' ', LTRIM(MyText))) AS Remainder
	FROM @tmp
	WHERE CHARINDEX(' ', LTRIM(MyText))>0
	UNION ALL
	SELECT RowNo, PartNo + 1 AS PartNo, LEFT(LTRIM(Remainder), CHARINDEX(' ', LTRIM(Remainder))-1) AS MyWord, RIGHT(LTRIM(Remainder), LEN(LTRIM(Remainder)) - CHARINDEX(' ', LTRIM(Remainder))) AS Remainder
	FROM CTE
	WHERE CHARINDEX(' ', LTRIM(Remainder))>0
	UNION ALL
	SELECT RowNo, PartNo + 1 AS PartNo, LTRIM(Remainder) AS MyWord, NULL AS Remainder
	FROM CTE
	WHERE CHARINDEX(' ', LTRIM(Remainder))=0
)
INSERT INTO @words (RowNo, PartNo, MyWord)
SELECT RowNo, PartNo, RTRIM(LTRIM(MyWord)) AS MyWord
FROM CTE 
ORDER BY RowNo, PartNo 

--SELECT *
--FROM @words 
--ORDER BY RowNo, PartNo 

SELECT DISTINCT t2.RowNo, 
            (
                SELECT t1.MyWord + ' ' AS [text()]
                From @words AS t1
                Where t1.RowNo = t2.RowNo 
                ORDER BY t1.PartNo
                For XML PATH ('')
            ) AS MySentence
        From @words AS t2

結果:

RowNo	MySentence
1	    This is very strange text... 
2	    This is very stupid text !!! 
3	    This is another very strange text. 

解決策 1

ユーザー TRIM スペースを削除する機能
トリム[^]

RTEIM[^]

Lトリム[^]

[ad_2]

コメント

タイトルとURLをコピーしました