我在数据库中将文本字符串存储为BLOB
数据类型。我想通过SQL select查询提取它,但是我在从BLOB
转换/转换为可读text
时遇到了问题。
我试过了。
select convert(nvarchar(40),convert(varbinary(40),BLOBTextToExtract))
from [NavisionSQL$Customer]
我想我需要类似的东西,但我无法弄明白我需要做什么转换。有人可以给我一些指示吗?
此致
答案 0 :(得分:8)
问题显然不是SQL服务器,而是更新字段的NAV系统。有一个压缩属性可以在NAV中的BLOB字段上使用,它不是SQL Server的一部分。因此,自定义压缩使数据无法读取,尽管转换有效。
解决方案是通过对象设计器,表设计器,字段属性(字段行上的Shift + F4)关闭压缩。
之后,可以使用例如提取数据: select convert(varchar(max),cast(BLOBFIELD as binary)) 来自表
感谢所有在很多方面都正确的答案!
答案 1 :(得分:4)
这取决于数据最初放入列中的方式。尝试其中任何一个应该工作:
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);
答案 2 :(得分:3)
可接受的答案仅对前30个字符有效。 这对我有用:
select convert(varchar(max), convert(varbinary(max),myBlobColumn)) FROM table_name
答案 3 :(得分:0)
你可以试试这个:
select convert(nvarchar(max),convert(varbinary(max),blob_column)) from table_name
答案 4 :(得分:0)
找到了这个......
bcp“SELECT top 1 BlobText FROM TableName”queryout“C:\ DesinationFolder \ FileName.txt”-T -c'
如果您需要了解bcp标志的不同选项......
答案 5 :(得分:0)
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;