前言

在最近看别人的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>

后记

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

sql中的一些函数(长期更新。。)的更多相关文章

  1. SQL中CHARINDEX()/INSTR()函数和SUBSTRING()/SUBSTR()函数

    一.SQLServer中的CHARINDEX() 和ORACLE中的INSTR()函数 1.INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; ...

  2. (转)SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  3. (转)SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  4. SQL点滴30—SQL中常用的函数

    原文:SQL点滴30-SQL中常用的函数 该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很 ...

  5. SQL中的object_id函数

    关于SQL中的object_id函数:应该就是指系统表中存储着数据库的所有对象 每一个对象都有一个唯一的标识符Id进行标识object_id 就是根据对象名称返回改对象的Idobject_name 就 ...

  6. SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  7. 数据库SQL中case when函数的用法

    Case具有两种格式,简单Case函数和Case搜索函数.这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式. 简单Cas ...

  8. 面试问题 - SQL 中存储过程与函数的区别

    SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行.  但函数也有着更多的限制,比如不能使用临 ...

  9. SQL中的charindex函数与reverse函数用法

       ----------------------首先介绍charindex函数-----------------------------                                ...

随机推荐

  1. vue-router之学习笔记

    用 Vue.js + vue-router 创建单页应用,是非常简单的.使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件( ...

  2. Python连接SQLite数据库代码

    import sqlite3 # create database conn = sqlite3.connect('test.db') #不存在就创建后再打开 print ("Opened d ...

  3. 51nod-1103-抽屉原理

    1103 N的倍数  题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得 ...

  4. nyoj38——最小生成树

    布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有 ...

  5. linux---进程,(rpm,yum)软件包

      3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G fdisk -l fdisk /dev/sdb p 查看 n 新建    p  主分区 ...

  6. Java Web中Kaptcha实现验证码

    首先进行导入相应的jar包: 1.如果是maven项目,在你的pom文件中进行添加如下代码,将自动下载jar包到你的工程中: <dependency>            <gro ...

  7. 安装VMware Tools:Ubuntu

    1.首先准备好linux.iso,在安装目录下应该可以找到,我使用的是这个: 链接:http://pan.baidu.com/s/1nuGQyIt 密码:b5mn 2.打开Ubuntu,CD中加载该i ...

  8. Codeforces命令行工具

    https://github.com/xalanq/cf-tool Codeforces Tool 是 Codeforces 的命令行界面的工具. 这玩意儿挺快.挺小.挺强大,还跨平台哦. 特点 提交 ...

  9. Qt中使用ActiveX控件

    (转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了Activ ...

  10. HDU 3473 Minimum Sum 划分树,数据结构 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=3473 划分树模板题目,需要注意的是划分树的k是由1开始的 划分树: 参考:http://blog.csdn.ne ...