跪求Oracle Blob转成字符串!!!!

_Nick_ 2010-09-07 02:56:31
需要将Oralce中的Blob类型转成字符串。

现在数据库中有一个字段是blob类型,里面存放的文本。
我要用 字符串 与这个字段做where查询。如 select * from tab where blob_= '中文';
blob_字段为Blob类型, 在mysql中可以unhex(hex(blob_))来得到字符串,那在Oracle中语句怎么写?

跪求。
tips: No oracle customize function.
...全文
22765 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
paullbm 2010-09-08
  • 打赏
  • 举报
回复
版主亲自出马,楼主放心。
_Nick_ 2010-09-08
  • 打赏
  • 举报
回复
终于搞定了。 诶。 mysql 跟 oracle都可以。

--mysql
select count(*) as col_0_0_ from score_news_online scorenewso0_ where scorenewso0_.onlineFlag=1 and trim(unhex(hex(scorenewso0_.oneTitle)))=trim(unhex('D5AEC8A8')) and scorenewso0_.newsType='news_sc_newstype_yxdt' and (scorenewso0_.assTitle between '10000000' and '50000000')

--oracle
select count(*) as col_0_0_ from bp_winner_ticketphoto scorenewso0_ where convert(UTL_RAW.CAST_TO_VARCHAR2(scorenewso0_.photodata), 'utf8', 'zhs16gbk')='债权'
and scorenewso0_.newsType='news_hub_newstype_yxdt' and (scorenewso0_.assTitle between '10000000' and '50000000')

da21 2010-09-08
  • 打赏
  • 举报
回复
oracle自带有的包专门处理blob等大文字类型的。
Rotel-刘志东 2010-09-08
  • 打赏
  • 举报
回复
to_char转化为字符数据类型。
_Nick_ 2010-09-07
  • 打赏
  • 举报
回复
select convert(UTL_RAW.CAST_TO_VARCHAR2('D5AEC8A8'),'UTF8','US7ASCII') from dual

还是乱码 - -
_Nick_ 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wildwave 的回复:]

引用 10 楼 guixiang155cm 的回复:
我使用了convert(blob_,'utf8') 还是不行。

3个参数,utl_raw.convert(a,b,c),b为当前数据库可识别的字符集,可以从nls_database_parameters中查看,c为当前2进制数据存储使用的字符集。该函数将a从字符集c转换到字符集b。字符集参数要写全,比如'AMERICAN_AMERIC……
[/Quote]

好把。 我现在要转。。 直接告诉我sql语句把。
小灰狼W 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 guixiang155cm 的回复:]
我使用了convert(blob_,'utf8') 还是不行。
[/Quote]
3个参数,utl_raw.convert(a,b,c),b为当前数据库可识别的字符集,可以从nls_database_parameters中查看,c为当前2进制数据存储使用的字符集。该函数将a从字符集c转换到字符集b。字符集参数要写全,比如'AMERICAN_AMERICA.US7ASCII','.'前面为英文字符集,后面为中文字符集
存储文本的话,可以使用clob来代替blob
_Nick_ 2010-09-07
  • 打赏
  • 举报
回复
我的Oracle 语言是
SIMPLIFIED CHINESE_CHINA.AL32UTF8
_Nick_ 2010-09-07
  • 打赏
  • 举报
回复
我使用了convert(blob_,'utf8') 还是不行。
小灰狼W 2010-09-07
  • 打赏
  • 举报
回复
缺省字符集不支持
使用UTL_RAW.CONVERT来转换一下
例如
UTL_RAW.CAST_TO_VARCHAR2(UTL_RAW.CONVERT(BLOB_,'AMERICAN_AMERICA.US7ASCII','AMERICAN_AMERICA.ZHS16GBK'))
_Nick_ 2010-09-07
  • 打赏
  • 举报
回复
我这里数据里用工具看是中文啊 也支持。 用什么办法转一下
minitoy 2010-09-07
  • 打赏
  • 举报
回复
数据库支持中文的话应该不会出乱码
SQL> select UTL_RAW.CAST_TO_VARCHAR2(a) from t_blob t ;

UTL_RAW.CAST_TO_VARCHAR2(A)
--------------------------------------------------------------------------------
中国
_Nick_ 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wildwave 的回复:]

UTL_RAW.CAST_TO_VARCHAR2(blob_)
[/Quote]

可以转陈功, 但如果是 中文有乱码。 怎么解决》?
minitoy 2010-09-07
  • 打赏
  • 举报
回复
学习
SQL> select UTL_RAW.CAST_TO_VARCHAR2(a) from t_blob t where UTL_RAW.CAST_TO_VARCHAR2(a)='12321';

UTL_RAW.CAST_TO_VARCHAR2(A)
--------------------------------------------------------------------------------
12321

SQL>
小灰狼W 2010-09-07
  • 打赏
  • 举报
回复
UTL_RAW.CAST_TO_VARCHAR2(blob_)
_Nick_ 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhangchu_63 的回复:]

如果存的数据量不大
直接TO_CHAR(BLOB_) = '中文'
[/Quote]

to_char 不行, 报错。 数据量很小
minitoy 2010-09-07
  • 打赏
  • 举报
回复
额...我是来看头像的
zhangchu_63 2010-09-07
  • 打赏
  • 举报
回复
如果存的数据量不大
直接TO_CHAR(BLOB_) = '中文'

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧