2012-11-07 31 views
0

我試圖從BINARY列中找到特定的數據行。在BINARY(2000)二進制列SELECT like

實施例的數據:

0x0600700701000C006B6173616E74696E676B6F000000000003000A0078009C0000000000E612101E000000000000000000006B031813361E00000000000000000000D4014B13141C0000000000000000000053017C13261E00000000000000000000A102E113361E000000000000000000009E02FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2201073200000000000000000000D604D11C101C000000000000000000008C01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0170000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000220047003700280016000F0001000B0003003F000000480200001D0000003101000000000000562B00003710000000000000134B000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB517010000000000000000000000000012060200000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191404000000000000000000000000009A13051D00000000000000000000A0029A13051D00000000000000000000A002BC3B0700000000000000000000000000FE050817000000000000000000000000FE05091E00000000000000000000000012060200000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191404000000000000000000000000009A13051D00000000000000000000A0029A13051D00000000000000000000A002FB050F0D000000000000000000000100FB05101E000000000000000000000100FB05111E000000000000000000000100FE13121D00000000000000000000B402FE13121D00000000000000000000B402E213141E00000000000000000000BC02E213141E00000000000000000000BC023613161D00000000000000000000FE003613161D00000000000000000000FE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB05191E000000000000000000000100FE13121D00000000000000000000B402FE13121D00000000000000000000B402E213141E00000000000000000000BC02E213141E00000000000000000000BC023613161D00000000000000000000FE003613161D00000000000000000000FE000413201E00000000000000000000CC000413201E00000000000000000000CC002E01222C000000000000000000008F052E01222C000000000000000000008F05FB05241E000000000000000000000100FB05251E000000000000000000000100FB05261E000000000000000000000100FB05271E0000000000000000000001000413201E00000000000000000000CC000413201E00000000000000000000CC002E01222C000000000000000000008F052E01222C000000000000000000008F05FB052C1E000000000000000000000100FC052D1E000000000000000000000000A9262E2E000000000000000000000000A9262E2E000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E01222C000000000000000000008F052E01222C000000000000000000008F05FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9262E2E000000000000000000000000A9262E2E000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000005E000000000000000000000000000000000000000500000000000000FFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

該數據具有的2201在某處1分的結果。 (爭取2201搜索數據,您將獲得1)

現在我想要使用此查詢:(它應該給我512行的結果)

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

但在沒有得到運氣結果。

說明:2201實際上是290.我試圖尋找十進制值290,它是以十六進制表示的數據在endian中是2201。

更新:

嘗試這種查詢(搜索:​​15584)

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

現在它返回幾乎所有行。即使手動檢查了E03C的行但沒有找到,但運行查詢時會返回。很奇怪。想法?

回答

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; 

你不應該投/字符數據轉換爲二進制。

+0

你好,試過這個,它沒有返回任何結果。我更新了我的問題,以獲取該專欄的信息。 THANKs :) – user1553142

+0

根據您的查詢嘗試了一些變化,它給了我結果,但錯誤一次。 – user1553142

+0

我試過你的第二個查詢,它有點作品,但返回比它應該更多的結果行。嗯?給出2000+,正確的應該只有512個結果。但在2000年以上的結果中,512是正確的。 – user1553142