• 【mysql】 操作 收集持续更新


    查询指定天数的数据(查询7天前状态等于2的数据)

    SELECT * FROM table where DATE_SUB(DATE_FORMAT(CURDATE(),"%Y-%m-%d"), INTERVAL 7 DAY) >= DATE_FORMAT(F_CreatorTime,"%Y-%m-%d") and F_Status=2 order by F_CreatorTime  desc;

    日期加减天数

    MySQL 为日期增加一个时间间隔:date_add()
    
    now()       //now函数为获取当前时间
    
    select date_add(now(), interval 1 day); - 加1天
    
    select date_add(now(), interval 1 hour); -加1小时
    
    select date_add(now(), interval 1 minute); - 加1分钟
    
    select date_add(now(), interval 1 second); -加1秒
    
    select date_add(now(), interval 1 microsecond);-加1毫秒
    
    select date_add(now(), interval 1 week);-加1周
    
    select date_add(now(), interval 1 month);-加1月
    
    select date_add(now(), interval 1 quarter);-加1季
    
    select date_add(now(), interval 1 year);-加1年
    
    MySQL adddate(), addtime()函数,可以用date_add() 来替代。
    
    2. MySQL 为日期减去一个时间间隔:date_sub()
    
    MySQL date_sub() 日期时间函数 和date_add() 用法一致。
    
    MySQL 中subdate(),subtime()函数,建议,用date_sub()来替代。

    中文按首字母排序(不区分多音字)

    select Id,`Name` from Area  where `Level`= 4  order by convert(`Name` using gbk) asc

    mysql表名区分大小写

    windows下修改my.ini,配置如下

    [mysqld]
    lower_case_table_names=2

    注:Linux为0

    一个字段可能对应多条数据,用mysql实现将多行数据合并成一行数据

    GROUP_CONCAT(Name SEPARATOR ',')

    需注意:

    1.GROUP_CONCAT()中的值为你要合并的数据的字段名;

     SEPARATOR 函数是用来分隔这些要合并的数据的;

     ' '中是你要用哪个符号来分隔;

    2.必须要用GROUP BY 语句来进行分组管理,不然所有的数据都会被合并成一条记录

    根据经纬度计算两点间的距离

    CREATE  FUNCTION `fnGetDistance`(`longitude1` DECIMAL(10,7),`latitude1` DECIMAL(10,7),`longitude2` DECIMAL(10,7),`latitude2` DECIMAL(10,7)) RETURNS bigint(20)
    BEGIN
        DECLARE Distance REAL DEFAULT 0;
            SET Distance = ROUND(6378.137*2*ASIN(SQRT(POW(SIN((latitude1*PI()/180-latitude2*PI()/180)/2),2)+COS(latitude1*PI()/180)*COS(latitude2*PI()/180)*POW(SIN((longitude1*PI()/180-longitude2*PI()/180)/2),2)))*1000);
            RETURN Distance; 
    END

    修改使用子查询赋值

    update `Menu` set ParentId=(select p.id from (SELECT id from `Menu` where MenuName='业务') p) where MenuName='视频';

    模糊搜索 常用的一共有4个方法,如下

    1. 使用locate()方法

            1.1.普通用法:

                  SELECT `column` from `table` where locate('keyword', `condition`)>0

             类似于 java 的 indexOf();不过 locate() 只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0;

            1.2. 指定其实位置:

                   SELECT LOCATE('bar', 'foobarbar',5);  --> 7 (从foobarbar的第五个位置开始查找)

    2.使用instr()函数 (据说是locate()的别名函数)

           SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0

           唯一不同的是 查询内容的位置不同,见SQL语句中过的keyword

    3.使用position()方法,(据说也是locate()方法的别名函数,功能一样) 

             SELECT `column` from `table` where position(‘keyword’ IN `condition`)

             不过它不再是通过返回值来判断,而是使用关键字 in

    4.使用find_in_set()函数

           如: find_in_set(str,strlist),strlist必须要是以逗号分隔的字符串

        如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N

    SQL> SELECT FIND_IN_SET('b','a,b,c,d'); +---------------------------------------------------------+ | SELECT FIND_IN_SET('b','a,b,c,d') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

    总结: locate、position 和 instr 的差別只是参数的位置不同,同时locate 多一个起始位置的参数外,两者是一样的。

             find_in_set()是个比较特殊的存在,但它们都是返回要查找的子字符串 在 指定字符串中的位置。

             速度上前3个比用 like 稍快了一点。(不过这四个函数都不能使用索引,这是个遗憾)

     

    出现中文乱码解决:

    修改my.ini文件,添加如下配置

    [client]
    default-character-set=utf8
    
    [mysqld]
    default-storage-engine=INNODB
    character-set-server=utf8
    collation-server=utf8_general_ci

    中文乱码参考:http://www.cnblogs.com/songdada119/p/5923219.html

    添加数据库报错:[Err] 1366 - Incorrect string value: 'xE4xBBx8ExE5x85xA5...' for column 'name' at row 1,这样因为添加数据中存在中文

    解决:检查当前字段字符集格式

  • 相关阅读:
    入门MySQL——基础语句篇
    装饰者模式
    (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter
    (18)IO流之字节缓冲路
    (17)IO中的异常处理
    (16)IO流之输入字节流FileInputStream和输出字节流FielOutputStream
    (15)IO流之File
    (14)jdk1.5开始的一些新特性:静态导入,增强for循环,可变参数,自动装箱/拆箱,枚举类型
    (13)正则表达式
    (12)泛型
  • 原文地址:https://www.cnblogs.com/miskis/p/6529185.html
Copyright © 2020-2023  润新知