oracle 拼接数据

这几天遇到Ajax取值时的数据传递是String类型,拿到字符串后就进行数据分割,所以需要对数据库查询到的数据进行拼接,

以下就是数据拼接的语句

 select replace(wm_concat(Trim (to_char(round(天数,1),'0.9'))),',','-') from( 
  SELECT
         MIN(logi_date)
         over(PARTITION BY logi_pi
         ORDER BY logi_date rows
         BETWEEN 1 following AND 2 following) - logi_date 天数
    FROM t_bu_transport_d_move m
   where logi_pi = 'A4071005'
   order by logi_date);

其中

1:wm_concat的用法为“行转列”,意思就是把某一列的全部数据放在同一行里,:这就拿到所有需要的列的数据的拼接;

2:replace的用法是替换,replace('字符串',',','-'),这一句的意思是把‘字符串’的‘,’替换为‘-’;

3:Trim的用法是去除字符串前后的空格,Trim('字符串');

4:to_char的用法是转为字符类型,to_char('number'),'0.9'))),这一句的意思是把number转换为字符类型,'0.9'是样式,且样式都用带'9'的字符表示;

5:round是对数字的取值,四舍五入;

6:over函数指定了分析函数工作的数据窗口的大小,这个数据窗口大小可能会随着行的变化而变化,例如:
    over(order by salary)按照salary排序进行累计,order by是个默认的开窗函数
    over(partition by deptno) 按照部门分区
    over(order by salary range between 50 preceding and 150 following)每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150的数据记录
    over(order by salary rows between 50 perceding and 150 following)前50行,后150行
    over(order by salary rows between unbounded preceding and unbounded following)所有行
    over(order by salary range between unbounded preceding and unbounded following)所有行

7:rows BETWEEN 1 following AND 2 following:1在这里不是从第1条记录开始的意思,而是指当前记录的前一条记录,意思是下一条数据减上条数据;

posted on 2017-03-22 18:48  攻速鞋  阅读(1696)  评论(0编辑  收藏  举报

导航