我有一個數據類型爲[IMAGE]的數據字段的SQL2008 R2數據庫,字段中的值實際上是代表大多數文本的各種格式的BLOB。二進制數據由HP的Service Manager創建,它們在內部用於填充GUI中的表和數組。我使用BIRT(4.2)基於Eclipse的報告工具來收集數據並創建報告。如何用空格或製表符替換非標準的Unicode使用SQL
儘管可以將IMAGE轉換爲表格數組,但性能問題在很多情況下都不適用。我正在嘗試創建一個完全基於SQL的解決方案,以將IMAGE轉換爲可讀,可用的文本。我關心的二進制字符大多在前127個Unicode字符集中,並且都在前255個Unicode中。這個範圍之外有一堆垃圾,大概用於GUI中的格式化。
我正在尋找一種SQL解決方案,它使用空格或製表符替換基本Unicode(127或255)以外的值。我嘗試使用replace()失敗,因爲它似乎只能識別基本的Unicode字符。我最好的解決方案是使用單個選項卡替換給定Unicode範圍之外的垃圾塊(並且與以下現有解決方案一樣簡單)。
我有一個解決方案將其轉換爲字符串,並留下一些垃圾。
select
-- Raw is an image, limited options for cast, so cast it as varbinary
-- Default characters converted is 30 so set to (8000)
-- then cast varbinary to varchar (so a person can read it)
-- substring ignores the first 9 characters after casting
substring (cast (cast (Table.a as varbinary (8000))as varchar(8000)), 9, 7991)as 'SubstringCastCast'
from dbo.Table
我有數據預覽的屏幕截圖,但名聲不足以將它張貼,它不通過複製和粘貼轉移阱。
我有另一種解決方案,我發現並提取了一塊,我需要(即IM00120)
select
-- Extract the 12 digit ticket number
substring (CastCast,
-- Find start of Ticket number
charindex('IM',CastCast)
, 12) as 'ETicket'
--Create data set with string that contains ticket, so I can extract it above
from(
select
-- use cast to get a small data set with the ticket number in it
cast (cast (Table.a as varbinary (200))as varchar(200)) as 'CastCast'
from dbo.Table
)InnerQ
謝謝,這是我在SQL中使用函數的第一次嘗試那麼回事因爲我正在應用和定製它。 – 2013-02-28 14:49:36
再次感謝,我已經啓動並運行在我的測試服務器上,並開始嘗試定製它來滿足我的需求。它似乎像廣告一樣工作。 – 2013-02-28 18:27:40
@JamesJenkins很高興我能幫忙:) – twoleggedhorse 2013-03-01 08:34:46