40

誤ったデータを特定しようとする場合(多くの場合、手動で確認して削除する必要があります)、TAB、スペース、キャリッジリターン、ラインフィードなどの非表示の文字を簡単に確認できるようにしたいと思います。このための組み込みの方法はありますか?

スタックオーバーフローに関する同様の質問で、Oracleに関して、DUMP(fieldname)関数が提案されましたが、対応する関数がSQL Serverに存在する場合でも、文字を確認する必要があるため、この関数が簡単になるかどうかはわかりません。彼らの文脈で。

私が思いついた最善のアイデアは、予想される非表示の文字を次のように表示可能な文字に置き換えることでした。

SELECT REPLACE(REPLACE(REPLACE(REPLACE(myfield, ' ', '˙'), CHAR(13), '[CR]'), CHAR(10), '[LF]'), CHAR(9), '[TAB]') FROM mytable

もっと良い方法はありますか?垂直TABなど、私が考慮していない他のあまり一般的でない非表示文字がある可能性があるため、この方法は好きではありません...ほとんどすべてのテキストエディタで実行できるように、「非表示文字を表示」をオンにします。 SQL Server Query Analyzerの優れた機能になるので、SQL Serverでもなんらかの方法で実行できるとほぼ期待しています...または、少なくとも誰かがこの種の空白を表示するために、私よりも優れたアイデアを持っていることを期待しています。情報。

SQLクエリアナライザではなく、かつてSQLEnterpriseマネージャであったインターフェイスの一部に「空白」を表示する組み込みの方法があることに気づきました。SQL Management Studio Object Explorerツリーでテーブルを右クリックし、[上位200行の編集]を選択します。結果として、空白(少なくともCR LF)は空の正方形として表示されます。

4

6 に答える 6

55

すべての空白の可能性に対処し、適切と思われるものだけを有効にする関数を作成します。

SELECT dbo.ShowWhiteSpace(myfield) from mytable

テストしたい空白のケースのみをコメント解除します。


CREATE FUNCTION dbo.ShowWhiteSpace (@str varchar(8000))
RETURNS varchar(8000)
AS
BEGIN
     DECLARE @ShowWhiteSpace varchar(8000);
     SET @ShowWhiteSpace = @str
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(32), '[?]')
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(13), '[CR]')
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(10), '[LF]')
     SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(9),  '[TAB]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(1),  '[SOH]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(2),  '[STX]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(3),  '[ETX]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(4),  '[EOT]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(5),  '[ENQ]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(6),  '[ACK]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(7),  '[BEL]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(8),  '[BS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(11), '[VT]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(12), '[FF]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(14), '[SO]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(15), '[SI]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(16), '[DLE]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(17), '[DC1]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(18), '[DC2]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(19), '[DC3]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(20), '[DC4]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(21), '[NAK]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(22), '[SYN]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(23), '[ETB]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(24), '[CAN]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(25), '[EM]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(26), '[SUB]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(27), '[ESC]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(28), '[FS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(29), '[GS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(30), '[RS]')
--   SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(31), '[US]')
     RETURN(@ShowWhiteSpace)
END
于 2011-12-28T15:03:57.833 に答える
11

私がやった方法は、すべてのデータを選択することでした

select * from myTable次に、結果セットを右クリックし、[結果を名前を付けて保存...] を選択して csv ファイルを作成します。

Notepad++ で csv ファイルを開くと、SQL Server の結果セットに LF 文字が表示されないことがわかりました。

于 2014-03-05T10:56:06.443 に答える
10

それらを見つけるために、あなたはこれを使うことができます

;WITH cte AS
(
   SELECT 0 AS CharCode
   UNION ALL
   SELECT CharCode + 1 FROM cte WHERE CharCode <31
)
SELECT
   *
FROM
   mytable T
     cross join cte
WHERE
   EXISTS (SELECT *
        FROM mytable Tx
        WHERE Tx.PKCol = T.PKCol
             AND
              Tx.MyField LIKE '%' + CHAR(cte.CharCode) + '%'
         )

EXISTSをJOINに置き換えると、それらを置き換えることができますが、複数の行が表示されます...それを回避する方法は考えられません...

于 2011-12-28T12:44:37.933 に答える
0
select myfield, CAST(myfield as varbinary(max)) ...
于 2011-12-28T12:40:08.687 に答える