7

新しいデータテーブルに移動する前に、古いデータテーブルでクリーンアップしたデータがあります。フィールドの1つは、列の左右にスペースがあります。私はこれに対処するために次のコードを書きましたが、まだ先頭のスペースがありますか?このコードを使用すると、データの大部分はクリーンになりますが、何らかの理由でRTアドレスの前にスペースがあります...他の誰かがこのタイプの問題を抱えていましたか?

,CASE   
WHEN PropStreetAddr IS NOT NULL
 THEN  (CONVERT(VARCHAR(28),PropStreetAddr))  
WHEN PropStreetAddr is NOT NULL Then  (Select LTrim(RTrim(PropStreetAddr)) As PropStreetAddr)
     ELSE NULL END  as 'PROPERTY_STREET_ADDRESS'

サンプル出力データ:

1234 20th St 
  RT 1 BOX 2  
560 King St  
610 Nowland Rd  
  RT 1  
1085 YouAreHere Ln  
  RT 24 Box 12  
4

4 に答える 4

11

同じ問題が発生しました。文字列をCAST(x as varbinary(64))でラップすると、16進数が表示され、これからA000が表示されます。これはノーブレークスペースであると思います。

削除するには、これを試してください(UNICODEの場合)。

LTRIM(RTRIM(REPLACE(my-column, NCHAR(0x00A0), '')))
于 2012-09-26T11:29:56.153 に答える
7

使用する:

WHEN PropStreetAddr is NOT NULL THEN
   (SELECT LTRIM(RTRIM((REPLACE(PropStreetAddr, 
                                SUBSTRING(PropStreetAddr, 
                                          PATINDEX('%[^a-zA-Z0-9 '''''']%', PropStreetAddr), 1), '') AS PropStreetAddr)
于 2010-07-30T20:03:18.517 に答える
6

これが機能する式です。目に見えないコンテンツはないと思います。疑わしい場合は、@OMGPoniesの推奨事項を引き続き追求する必要があります。また、非表示のコンテンツを処理する必要がある場合は、この式にPATINDEX式を追加できると思います。

SQL Server CASEは、1つのWHEN句のみを処理してから中断します。したがって、2番目のデータ変換に到達することはありません。また、LTRIMおよびRTRIM関数を使用すると、すべてのNULL値がNULLに変換されます。したがって、NULLを使用して何かを実行する場合を除いて、テストする必要はありません。

だから、これを試してみてください:

CONVERT(VARCHAR(28), LTRIM(RTRIM(PropStreetAddr))) as [PROPERTY_STREET_ADDRESS]
于 2010-07-30T21:19:52.253 に答える
1

私も同様の状況にありますが、最初はLTRIMとRTRIMの機能が正しく機能していないと思っていました。ただし、テストして、適切な空白文字ではないことがわかりました(実際の文字は、問題のある印刷できない文字とは異なる場合があります)。

ASCII

キャラクターの名前が160であることがわかったので、次のような置換を行いました。

SELECT REPLACE('NaughtyString', CHAR(160),'') 

それが誰かを助けることを願っています

于 2013-06-07T14:51:07.007 に答える