0

列から特定のデータ行を見つけようとしていBINARYます。

BINARY(2000)列のデータの例:

0x0600700701000C006B6173616E74696E676B6F000000000003000A0078009C0000000000E612101E000000000000000000006B031813361E00000000000000000000D4014B13141C0000000000000000000053017C13261E00000000000000000000A102E113361E000000000000000000009E02FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2201073200000000000000000000D604D11C101C000000000000000000008C01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0170000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000220047003700280016000F0001000B0003003F000000480200001D0000003101000000000000562B00003710000000000000134B000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB517010000000000000000000000000012060200000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191404000000000000000000000000009A13051D00000000000000000000A0029A13051D00000000000000000000A002BC3B0700000000000000000000000000FE050817000000000000000000000000FE05091E00000000000000000000000012060200000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191404000000000000000000000000009A13051D00000000000000000000A0029A13051D00000000000000000000A002FB050F0D000000000000000000000100FB05101E000000000000000000000100FB05111E000000000000000000000100FE13121D00000000000000000000B402FE13121D00000000000000000000B402E213141E00000000000000000000BC02E213141E00000000000000000000BC023613161D00000000000000000000FE003613161D00000000000000000000FE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB05191E000000000000000000000100FE13121D00000000000000000000B402FE13121D00000000000000000000B402E213141E00000000000000000000BC02E213141E00000000000000000000BC023613161D00000000000000000000FE003613161D00000000000000000000FE000413201E00000000000000000000CC000413201E00000000000000000000CC002E01222C000000000000000000008F052E01222C000000000000000000008F05FB05241E000000000000000000000100FB05251E000000000000000000000100FB05261E000000000000000000000100FB05271E0000000000000000000001000413201E00000000000000000000CC000413201E00000000000000000000CC002E01222C000000000000000000008F052E01222C000000000000000000008F05FB052C1E000000000000000000000100FC052D1E000000000000000000000000A9262E2E000000000000000000000000A9262E2E000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E01222C000000000000000000008F052E01222C000000000000000000008F05FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9262E2E000000000000000000000000A9262E2E000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000005E000000000000000000000000000000000000000500000000000000FFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

このデータには、2201どこかの結果が 1 つあります。(2201 のデータを検索してみると、1 が得られます。)

今、私はこのクエリを使用しようとしています:(512行の結果が得られるはずです)

SELECT * 
FROM table
WHERE binaryfield LIKE '%2201%'
ORDER BY key

しかし、結果を得るには運がありません。

注: 2201 は実際には 290 です。エンディアンのデータで 16 進数の 2201 である 10 進数値 290 を探しています。

アップデート:

このクエリを試しました (検索: 15584)

SELECT *
FROM CHAR_DATA1
WHERE CHAR_DATA LIKE '%'+CAST(0xE03C AS nvarchar(MAX))+'%'
ORDER BY CHAR_KEY;

これで、ほぼすべての行が返されます。E03C の行を手動でチェックしても何も見つかりませんでしたが、クエリを実行すると返されます。非常に奇妙な。アイデア?

4

1 に答える 1

2

LIKE演算子は、文字データ型でのみ機能します。次のように、文字列にCASTを実行してみてください。

SELECT * 
  FROM table
 WHERE CAST(binaryfield AS nvarchar(MAX)) LIKE '%290%'
 ORDER BY key;

- また -

SELECT * 
  FROM table
 WHERE CAST(binaryfield AS nvarchar(MAX)) LIKE '%'+CAST(0x2201 AS nvarchar(MAX))+'%'
 ORDER BY key;

また、データのサブセット (ファイル ヘッダーなど) を見たい場合は、次のようにすることができます。

SELECT * 
  FROM table
 WHERE CAST(LEFT(binaryfield, 8) AS nvarchar(MAX)) -- Only compares the first 8 bytes
         LIKE '%'+CAST(0x2201 AS nvarchar(MAX))+'%'
    OR CAST(SUBSTRING(binaryfield, 34, 4) AS nvarchar(MAX)) -- Compares bytes 34-38
         LIKE '%'+CAST(0x2201 AS nvarchar(MAX))+'%'
 ORDER BY key;

編集

更新された質問に関して、これはあなたが期待している結果をもたらしますか:

 SELECT *
   FROM CHAR_DATA1
  WHERE CHAR_DATA COLLATE SQL_Latin1_General_CP1_CI_AS
          LIKE '%'+CAST(0xE03C AS nvarchar(MAX))+'%'
 ORDER BY CHAR_KEY;

文字データをバイナリにキャスト/変換する必要はありません。

于 2012-11-07T02:53:08.483 に答える