zoukankan      html  css  js  c++  java
  • sql中的一些函数(长期更新。。)

    前言

    在最近看别人的sql的时候,看到一些函数,比如left(),right()等等,好奇是什么意思,查询之后觉得还是挺有用的,特此记录下来。博客会在遇到新的函数的时候定期更新。

    正文

    1. left()和right()

    在一个sql中遇见了left(character,integer)函数,觉得好奇,百度了之后发现意义是:返回left(character,integer)中character从左起第一个到第integer个字符。如果integer是负的,那么返回空的字符串。

    right()同理。

    举个例子:left("abcdefg",3)得到的结果是:abc,因为要拿abcdefg的前三个字符,也就是abc。

    需要注意的是:oracle中是没有这两个函数的,oracle中对应的是substr(字符串,截取开始位置,截取结束位置)。

    2. ISNULL(A,B)

    关于ISNULL(A,B),其意义是:如果A为null的时候,则返回B的值,如果不为null,则返回A的值。常见应用为聚合求和的时候。

    举个例子:

    ISNULL(SUM(num),0):如果对num列求和结果为null(也就是数据库这列数据都没有值),那么就返回0。

    3. NOW()函数:<<Mysql可用>>
    NOW()函数,可以用来获取当前时间的函数。目前测试了mysql和sqlserver,只可以在mysql中使用。

    --Mysql数据库

    SqlServer数据库,无法识别的内置函数

    4. day(),month(),year()时间函数
    • day()函数:获取查询结果的日期值
    • month()函数:获取查询结果的月份值
    • year()函数:获取查询结果的年份值

    正常的年份的查询,8位的数据格式。

    6位的时间格式,如果年份的后两位<= 12,那么系统会默认将后两位作为月份和日期来处理,前两位默认为20+“日期的前两位”,所以得到的是2020年12月01日的时间,需要特别注意!

    如果你的年份后两位>12,那么会直接报错!因为不能转换成大于12月的数据。所以一般还是建议时间格式位8位!

    所以:如果时间格式确定都是6位,那么建议使用的是left()函数,而非year()函数。

    5. dateAdd()和date_add()函数

    sqlServer中,几天后的时间使用的是dateAdd()函数,DATE_ADD() 函数向日期添加指定的时间间隔。

    DATE_ADD(date,INTERVAL expr type)
    date 参数是合法的日期表达式。
    expr 参数是您希望添加的时间间隔。
    type 参数可以是下列值:见w3cschool链接

    在mysql中,使用的则是:date_add()函数,DATEADD() 函数在日期中添加或减去指定的时间间隔。

    DATEADD(datepart,number,date):
    date 参数是合法的日期表达式。
    number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
    datepart 参数可以是下列的值:见w3cschool链接

    用法如下:

    sqlServer中的方法

    mysql中的方法

    特别注意的是:更过的date的时间函数,请参考w3cschool:W3Cschool数据库时间函数链接,其中有mysql和sqlServer的时间函数。

    6. UNION和UNION ALL

    在写sql的时候,有些数据的存储可能涉及到分库分表,查询的时候,可能需要查询所有的分表,这个时候,就需要用到UNION或者UNION AL。

    union操作符:用于合并两个或多个SELECT语句的结果集,这里需要注意的是:UNION内部的SELECT语句必须拥有相同数量的

    列,列也必须拥有相似的数据类型,同时,每条SELECT语句中列的顺序必须相同。

    SELECT name FROM user UNION  SELECT name FROM user1 //得到的结果就是:分别从user表和user1表中查询name字段,然后合并到一起。

    需要特别注意的是:union操作符合并的结果集,不允许重复,如果不要去重的话,需要使用union all。

    案例sql:(参考:https://blog.csdn.net/zouxucong/article/details/73468979)使用foreach循环,并用union all连接,简化操作,查询多表并将结果集进行合并。分库分表必会技能!

    <select id="getFourteenHotPost" parameterType="map" resultMap="productCommentsInfoAndroid">  
            select t.comments_id,t.product_id,t.comment,t.order_path from (  
            <foreach collection="tableNames" item="item" separator="UNION ALL">  
                (SELECT c.comments_id,c.product_id,c.comment,i.order_path,c.p_index,c.t_index,c.title,c.time   
                FROM ${item} as c left join `gshop_comments_img` as i on c.comments_id = i.comments_id    
                where c.object_type=2 and c.display=1 and c.is_show=1   
                and c.t_index=1   
                GROUP BY c.product_id ORDER BY c.p_index asc,c.t_index desc,c.title desc,c.time desc limit 14)    
            </foreach>) t  
            GROUP BY t.product_id ORDER BY t.p_index asc,t.t_index desc,t.title desc,t.time desc limit 14  
        </select>  

    后记

    这里仅仅记录了目前遇见的一些函数,如果以后遇到了还会继续更新。

  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/chenmc/p/9240078.html
Copyright © 2011-2022 走看看