oracle查询怎么转码,oracle转换数字
数据库Oracle 在查询的时候将LONG类型转换成VARCHAR2
Oracle中的LONG类型有两种:
峰峰矿网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联公司成立于2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
LONG文本类型,能存储2GB的文本。与VARCHAR2或CHAR类型一样,存储在LONG类型中的文本要进行字符集转换。
LONG RAW类型,能存储2GB的原始二进制数据(不用进行字符集转换的数据)。
在此并不解释如何使用LONG类型,而是会解释为什么你不希望在应用中使用LONG(或LONG RAW)类型。首先要注意的是,Oracle文档在如何处理LONG类型方面描述得很明确。Oracle SQL Reference手册指出:
不要创建带LONG列的表,而应该使用LOB列(CLOB、NCLOB、BLOB)。支持LONG列只是为了保证向后兼容性。
没有内置的函数处理,得自己写处理函数,可以参考:网页链接
oracle 查询结果内容转换
创建测试表:
create table test
(score varchar2(100));
insert into test values ('50,60,70');
insert into test values ('60,70,80');
commit;
执行:
select wm_concat(case
when t.score 60 then
'不及格'
else
'及格'
end) score
from (select a.rowid rd, REGEXP_SUBSTR(a.score, '[^,]+', 1, l) score
from test a, (SELECT LEVEL l FROM DUAL CONNECT BY LEVEL = 100) b
WHERE l = LENGTH(a.score) - LENGTH(REPLACE(score, ',')) + 1) t
group by t.rd
结果:
如何将Oracle查询结果转成XML文件
在oracle中提供了许多内置的程序包,它们用于扩展数据库的功能。在开发应用程序时,可以利用这些程序包。数据库用户sys拥有oracle提供的所有程序包。他们被定义为共有同义词,并将执行权限授予了public用户组,任何用户都可以访问它们。其中DBMS_XMLQUERY包用于将查询结果转换为XML格式,DBMS_LOB程序包包含雨处理大型对象的过程和函数。下面我们看一下DBMS_XMLQUERY和DBMS_LOB的用法:
SQL DECLARE
result CLOB;
xmlstr VARCHAR2(32767);
line VARCHAR2(2000);
line_no INTEGER :=1;
BEGIN
result :=DBMS_XMLQUERY.getXml('select empno,empname from employee');
xmlstr :=DBMS_LOB.SUBSTR(result,32767);
LOOP
EXIT WHEN xmlstr IS NULL;
line :=SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10)-1));
DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);
xmlstr :=SUBSTR(xmlstr,INSTR(xmlstr,CHR(10)+1));
line_no :=line_no + 1;
END LOOP;
END;
在上面的例子中我们声明了一个CLOB数据类型的result变量,以及VARCHAR2类型的xmlstr和line两个变量。其中,getXml函数用于将查询结果转换为XML格式,SUBSTR函数检索子字符串,32767值指定要从CLOB数据类型读取的最大字节数。检索到的字符串存储xmlstr变量中。LOOP块循环执行,每次从xmlstr中读取一行。INSTR函数返回一个字符串在另一个字符串首次出现的位置。在此,该函数返回换行符在字符串中的位置,直到遇到下一行。
大家觉得例子的结果能不能读出我们预期的结果呢?试试就知道了!!!
结果如下:
?xml version='1.0'?
ROWSET
ROW num="1"
EMPNOE001/EMPNO
EMPNAMEJane/EMPNAME
/ROW
ROW num="2"
EMPNOE002/EMPNO
EMPNAMEJohn/EMPNAME
/ROW
ROW num="3"
EMPNOE003/EMPNO
EMPNAMEJoe/EMPNAME
/ROW
/ROWSET
oracle表的查询格式转换
select 姓名,sum(decode(考试时间,'2014/4',数学成绩,0)) as 201404数学成绩,
sum(decode(考试时间,'2014/4',英语成绩,0)) as 201404英语成绩,
sum(decode(考试时间,'2014/5,数学成绩,0)) as 201405数学成绩,
sum(decode(考试时间,'2014/5,英语成绩,0)) as 201405英语成绩,
sum(decode(考试时间,'2014/6,数学成绩,0)) as 201406数学成绩,
sum(decode(考试时间,'2014/6,英语成绩,0)) as 201406英语成绩
group by 姓名
通常这种问题都是用分组函数和decode来解决的,网上还有不少这方面的例子,你可以查一下。
ORACLE不同数据库字符集数据交互,如何转换乱码?
1。select * from v$nls_parameters 查询nls的参数,获得数据库服务器端的字符编码 NLS_LANGUAGE NLS_CHARACTERSET 2。修改本地环境变量,设置 NLS_LANG = SIMPLIFIED CHINESE.ZHS16GBK //这个是我们的数据库字符编码 NLS_LANG格式: NLS_LANG = language_territory.charset 有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:language 指定服务器消息的语言。 territory 指定服务器的日期和数字格式。 charset 指定字符集 需要保证要设置客户端字符集与服务器端字符集一致
oracle转码后再转回去,求教
当我们面对一个数据表,且表结构为:
span style="font-size:18px;"create table R_ExtSubFina_Month(rptdate date not null,rptname varchar2(10) not null,rptNum varchar2(10) not null,SaleMoney number(18,3),proMoney number(18,3),,Status varchar2(2) );/span
现在表中已经存在的数据如下(PS:这里的报送编码需要从别的表中获取):
但是我们需要从当前表中统计出今年的本月,去年的本月和今年上个月的销售额和定金的数据,那么我们的sql语句应该怎么写??
方案一:union
我们都知道union是对表格进行联合查询的,当我们需要对两个表的数据进行查询我们可以使用,但是要遵守:
1.要求我们获取两个表的字段个数和字段数据类型是要完全一致的;2.如果数据类型一致,但是个数不一致,我们可以对某个表中设计空字段,比如需要查询A表中的两个字段,需要B表中的1个字段,那么我们就要将语句这样写:
select * from A
union
select a, ' ' from B
此处的 ‘ ’ 就保证了A 和B表的字段数量一致;但是我们的sql语句不单单是为了查询结果,对结果进行显示和分析,更重要的是性能;所以union不能入围我们的选择方案(具体原因稍后在方案2中讲解)方案二:union all
使用union 需要将两个表的字段数量和字段的数据类型都一致,为了避免这种问题,我们使用union all,这样我们可以直接将上面的语句修改为:
select * from A union all(select * from B);虽然可以解决这个查询的问题,但是显示的结果中需要三个不同日期的结果,而这三个日期需要我们手动进行加减计算,然后再同一个表的同一个字段中取不同的值,那么问题来了,当我们使用union all 我们需要以每一个日期作为条件对表进行查询,这样就对表进行了至少三次的扫描,所以我们需要担心这样的语句带来的性能问题;那么相比方案一我们有没有一些进步呢?答案是有的;Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;Union All:对两个结果集进行并集操作,包括重复行,不进行排序;Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All方案三:decode转码求和
原理:我们将每一个日期作为条件一次性将所有的数据都查询出来,这样我们会查询出来三条数据,详细如下:
我们可以发现红色框内的数据有为0的数据,这样我们想要的数据已经呈现出来,但是我们如何把三条数据合成一条(不含0)呢??
思路: 行专列--decode--求和
我们将上面的数据看成一个矩阵,矩阵行专列之后结果是不变的,所以上图中的数据就会变成下图中的数据:
这样我们可以对每一列求和,然后和刚才的三个日期进行合并,这样三条数据就会被我们合成一条;实现代码如下:
PS:参数设置:l_year :当前的年月 ; l_curLastMonth :今年的上个月; l_lastYear :去年的这个月span style="font-size:18px;"select l_year year, l_curLastMonth lmon,l_lastYear lymon, decode(A.rptdate,l_year,A.saleMoney ,0) AS , decode(A.rptdate, l_curLastMonth,A.saleMoney ,0) ASS, decode(A.rptdate,l_lastYear,A.saleMoney ,0) ASSS from A /span
网站名称:oracle查询怎么转码,oracle转换数字
分享链接:http://pwwzsj.com/article/hdhsoo.html