常用 sql

 一、 sql 多个字段拼接

mysql:
    1. concat函数  如果连接串中存在NULL,则返回结果为NULL:
       例如: select concat('1','2','3') from test  //结果123
                select concat(Null,'2','3') from test  //结果Null
    2. concat_ws函数  concat_ws(':','1','2','3')  
         第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。
         分隔符可以是一个字符串,也可以是其它参数。分隔符为NULL,则返回结果为NULL。
         可以对NULL进行判断,并用其它值进行替换  select concat_ws(':','1','2',ifNULL(NULL,'0'),'3') from bank //结果1:2:0:3 
         例如: select concat_ws(':','1','2','3') from test //结果:1:2:3
                 select concat_ws(Null','1','2','3') from test //结果:Null
ORACLE:
      1、连接符号“||”的使用,能将多个表中不同的字段进行拼接。
         例如:select  bxze||'#'||jkdh from bx_bxdj  //结果 55471#B X1200025    
 
二、随机查询 1 条数据

  My SQL:,随机查询语句 1 条

         select  *  from  表名 order by rand() limit 1;

  SQL Server,随机查询语句1条

    select top 1  * from  表名order by newid();

  Oracle,随机查询查询语句1条

    select * from(  select  *  from 表名 order by dbms_random.value) where rownum = 1;

三、四舍五入

       1..整数部分超过三位的时候以逗号分割,并且返回的结果是string类型的。
             SELECT FORMAT(10,2);------------->10.00                   SELECT FORMAT(10.234,2);------------->10.23      

    SELECT FORMAT(103134,2);------------>103,134.00

      2.返回值是数值类型

          select ROUND(10, 2);------------->10                            select ROUND(10.234,2);------------->10.23          

    select ROUND(103134.1221, 2);----------->103134.12

 四 、mysql  isnull() /IFNULL()

           select isnull(NULL) --------->1               select isnull("123")-------->0

    select isnull(123)-------->0                    select isnull(1/0)-------->1

  _____________________________________________________________________________________________

         select IFNULL(NULL,0) ---------->0          select IFNULL("123",0)------>123  

         select IFNULL(1/0,10);----------->10

五 、模糊查询

    mySql: 

    1、查询 userName 中有'刘'的所有列
    SELECT * FROM tuser WHERE userName LIKE '%刘%'
  2、查询 userName 中有'刘'和'三'的所有列
    SELECT * FROM tuser WHERE userName LIKE '%刘%' AND userName LIKE '%三%'
  3、查询 userName 中有'刘'和'五' 且'刘'在'五' 前面的所有列
    SELECT * FROM tuser WHERE userName LIKE '%刘%五%'

 

六、分页
      mySql:
         语法:select * from tableName where 条件 limit 开始标记 , 页面容量;
         例如:select * from  tuser WHERE userName LIKE '%刘%' LIMIT 0,10     
                   从第0条开始,每页10条
 
七.  mysql更新一个表里的字段等于另一个表某字段的值
           update a left join c on a.id = c.id set a.body = c.c1 where a.id=c.id;
           实际业务需求  要把记录表的条数,统计到 统计表中。
           UPDATE lessonstatistics lest LEFT JOIN (SELECT count(LE_ID) count, LE_ID FROM lessonscore GROUP BY LE_ID ) t
    ON lest.le_id = t.le_id
    SET lest.PRAISEAMOUNT = t.count
    WHERE lest.le_id IN ( SELECT LE_ID FROM lessonscore GROUP BY LE_ID )
八、关于日期的查询
<!-- 按照年份查询-->

SELECT id,code,createtime FROM  tab  WHERE year(createtime)='2015' ORDER BY createtime LIMIT 0,10
<!-- 按照季度统计-->
SELECT QUARTER(NOW()) #查询季度 结果为当前的季度 返回结果1-4 之间
SELECT id,code,createtime FROM  tab   WHERE quarter(createtime) =1 LIMIT 0,10
<!-- 按照时间查询   -->

#UNIX时间戳,每个时间对应了一个唯一的UNIX时间戳,该时间戳是从'1970-01-01 00:00:00' 为0开始计时,每秒增加1

#将时间转化为时间戳。(date 类型数据转换成 timestamp 形式整数)  没传时间参数则取当前时间的时间戳   

SELECT id,code,createtime FROM tab WHERE UNIX_TIMESTAMP(createtime) >= UNIX_TIMESTAMP('2016-03-15') LIMIT 0,10

#参数 类型不能为 yyyy-mm 
SELECT CURDATE() #当前日期
select date_sub('2015-09-01', interval 1 month);#当前日期的上个月
SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 YEAR),'%Y-%m')#当前日期的去年同月
posted @ 2015-06-04 09:16  小禾点点  阅读(228)  评论(0编辑  收藏  举报