データベースにBLOB
データ型として保存されたテキスト文字列があります。 SQL選択クエリで抽出したいのですが、BLOB
から読み取り可能なtext
への変換/キャストに問題があります。
私は試しました.
select convert(nvarchar(40),convert(varbinary(40),BLOBTextToExtract))
from [NavisionSQL$Customer]
私は同様のものが必要だと思いますが、変換を行うために必要なものを正確に理解できません。誰かが私にいくつかの方向を教えてもらえますか?
よろしく
問題は明らかにSQLサーバーではなく、フィールドを更新するNAVシステムでした。 NAVのBLOBフィールドで使用できる圧縮プロパティがあり、SQL Serverの一部ではありません。したがって、変換は機能しましたが、カスタム圧縮によりデータが読み取れなくなりました。
解決策は、オブジェクトデザイナー、テーブルデザイナー、フィールドのプロパティ(フィールド行でShift + F4)を使用して圧縮をオフにすることでした。
その後、次のようにしてデータの抽出を行うことができます:select convert(varchar(max)、cast(BLOBFIELD as binary))from Table
多くの点で正解であったすべての回答に感謝します!
受け入れられた回答は、最初の30文字でのみ機能します。これは私にとってはうまくいきます:
select convert(varchar(max), convert(varbinary(max),myBlobColumn)) FROM table_name
それは、データが最初に列に入れられた方法によって異なります。次のいずれかを試してみてください:
SELECT CONVERT(NVarChar(40), BLOBTextToExtract)
FROM [NavisionSQL$Customer];
または、それがvarchar
だけの場合...
SELECT CONVERT(VarChar(40), BLOBTextToExtract)
FROM [NavisionSQL$Customer];
このスクリプトを使用して、SQL Server 2K8 R2で検証およびテストしました。
DECLARE @blob VarBinary(MAX) = CONVERT(VarBinary(MAX), 'test');
-- show the binary representation
SELECT @blob;
-- this doesn't work
SELECT CONVERT(NVarChar(100), @blob);
-- but this does
SELECT CONVERT(VarChar(100), @blob);
CREATE OR REPLACE FUNCTION HASTANE.getXXXXX(p_rowid in rowid) return VARCHAR2
as
l_data long;
begin
select XXXXXX into l_data from XXXXX where rowid = p_rowid;
return substr( l_data, 1, 4000);
end getlabrapor1;
あなたはこれを試すことができます:
select convert(nvarchar(max),convert(varbinary(max),blob_column)) from table_name
これを見つけた...
bcp "SELECT top 1 BlobText FROM TableName" queryout "C:\ DesinationFolder\FileName.txt" -T -c '
Bcpフラグのさまざまなオプションについて知る必要がある場合...