Sybase,几个sql使用小功能

来源:互联网 发布:手机淘宝查号在哪里查 编辑:程序博客网 时间:2024/05/21 17:39

一些实用的SQL的写法可以减少自己的程序繁琐程度,有些事情的确可以通过sql让所需要的数据在rs里面就能获取:

1. 将数据库中的几个字段合为一个字段输出:

-- 主要使用convert将其它非varchar类型的转为统一类型再进行加的操作

select column1+','+convert(varchar(1),column2) as column from mytable 

 

2. 按表中某个字段分类,并将每一类的数据记录数输出

-- 按type分类,将每一类type(1,2,3)的记录数作为count_num输出,并且对 column1进行去重,比如记录中column1的值为"test"的有两条,但只作为一条统计

 select count(distinct column1) as count_num from mytable where type in(1,2,3)  group by type order by type asc

 

3. 多个字段同时计算sum并输出,按一定的时间条件

-- 分别计算clm1,,,的sum

select sum(clm1) as out1, sum(clm2) as out2, sum(clm3) as out3 from mytable where convert(varchar,sdate ,112)='2015-01-21 12:11:10"

 

4. sybase的后台分页与oracle不同:

    a. Sybase分两步:

    (1) 将表复制一份,并在复制表里面增加自增的identity类型的字段(类似oracle表里面自有的rownum字段);

        select *,ids=identity(9) into mytemptable from mydataTable

    (2) 使用select top结合identify类型字段将记录查出:

        select top  100 from mytemptable where ids > (pageSize * (pageNow - 1))   and ids <=  (pageSize * pageNow)

 

5.  Java程序逻辑中如果需要大批量执行sql语句,可以按批次执行,比如每批次300条,但对于insert来说效率还是很低,因为数据库有日志操作

    public static int executeBatchSql(List<String> batchsql) {
        int count = batchsql.size();
        Connection conn = null;
        Statement stmt = null;
        int[] result = new int[batchsql.size()];
        try {
            conn = DBConnection.getConnection();
            stmt = conn.createStatement();
            for (int i = 0; i < count; i++)
            {
    // 将sql加入批处理池
                stmt.addBatch(batchsql.get(i));
                if ((i>0 && i % 300 == 0) || i == batchsql.size() - 1){
                    result = stmt.executeBatch();
                }
                if (i !=0 && i % 300 == 0) {
        // 每批次后重新建立链接
                    DBConnection.releaseResources();
                    conn = DBConnection.getConnection();
                    stmt = conn.createStatement();
                }
            }
            return result.length;
        } catch (Exception ex)
        {
            ex.printStackTrace();
            return -1;
        } finally {
      // 释放数据库资源
            DBConnection.releaseResources();
        }
    }

6. 其它还有,后续再补充编辑该帖;

0 0