TRUNCATE(X,D) 此函数用于返回X的截断到小数位D号的值。 如果D为0,则小数点被除去。如果D是负的,那么D的值的整数部分值的数量被截断。考虑下面的例子: SQLSELECT TRUNCATE(7.536432,2 ); +-
TRUNCATE(X,D)
此函数用于返回X的截断到小数位D号的值。 如果D为0,则小数点被除去。如果D是负的,那么D的值的整数部分值的数量被截断。考虑下面的例子:
SQL>SELECT TRUNCATE(7.536432,2);
+---------------------------------------------------------+
| TRUNCATE(7.536432,2) |
+---------------------------------------------------------+
| 7.53 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
case when ... then ...
case when d.generating_capacity >= 0 and d.generating_capacity <= 10 then 10 when d.generating_capacity > 10 and d.generating_capacity <= 20 then 20 when d.generating_capacity > 20 and d.generating_capacity <= 30 then 30 when d.generating_capacity > 30 and d.generating_capacity <= 40 then 40 when d.generating_capacity > 40 and d.generating_capacity <= 50 then 50 when d.generating_capacity > 50 and d.generating_capacity <= 60 then 60 when d.generating_capacity > 60 and d.generating_capacity <= 70 then 70 when d.generating_capacity > 70 and d.generating_capacity <= 80 then 80 when d.generating_capacity > 80 and d.generating_capacity <= 90 then 90 when d.generating_capacity > 90 and d.generating_capacity <= 100 then 100 <!-- when d.generating_capacity > 100 then 11 --> end as byGroup
注意 <= 需要用 <= 代替
LENGTH(str)
返回字符串str的长度,以字节为单位。 一个多字节字符算作多字节。这意味着,对于包含五个二字节字符,length()返回10,而CHAR_LENGTH()返回5。
SQL> SELECT LENGTH('text');
+---------------------------------------------------------+
| LENGTH('text') |
+---------------------------------------------------------+
| 4 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
concat(str1, str2,...)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
company like concat('%', #{powerStation}, '%')
UNION——操作符用于合并两个或多个 SELECT 语句的结果集。(注:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。)
UNION 语法SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
UNION 操作符选取不同的值。如果允许有重复的值,请使用 UNION ALL
2.UNION ALL 语法:会列出所有重复的值。
SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
<where>
<select id="selectIfCondition" resultType="com.heiketu.testpackage.pojo.Product"> SELECT prod_id prodId, vend_id vendId, prod_name prodName, prod_desc prodDesc FROM Products <where> <if test="prodId != null and prodId != ''"> AND prod_id = #{prodId} </if> <if test="prodName != null and prodName != ''"> AND prod_name = #{prodName} </if> </where></select>
映射文件中的where
标签可以过滤掉条件语句中的第一个and
或or
关键字。以上SQL当prodId
!=null时会被mybatis的where
标签去除掉多余的and
关键字,生成的sql如下:
SELECT prod_id prodId, vend_id vendId, prod_name prodName, prod_desc prodDescFROM ProductsWHERE prod_id = ?AND prod_name = ?
<if>
在mybatis的xml文件中编写sql语句有时候需要判断是否为空或者判断某些值的情况,
<if test="pbycgkQuery.cityCode != null and pbycgkQuery.cityCode != ''"> and city_code = #{pbycgkQuery.cityCode} </if>
<foreach>
foreach 也就是遍历迭代,在SQL中通常用在 in 这个关键词的后面
foreach元素的属性主要有 item,index,collection,open,separator,close。
分别代表:
item表示集合中每一个元素进行迭代时的别名,
index用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束
基础用法一:
<select id="selectByIds" resultType="com.txw.pojo.User"> select * from user where id in <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach> </select>
基础用法二:
select schedule_scope_name label, sum(generating_capacity) value from distribsun_station_list <where> <foreach collection="countys" index="index" item="county" open="(" separator="or" close=")"> schedule_scope_name LIKE CONCAT('%', #{county}, '%') <if test="endTime != null and endTime != ''"> and accept_time < #{endTime} </if> </foreach> </where> GROUP BY schedule_scope_name
插入用法:
insert into green_power_intensity_carbon_data ( time, data ) values <foreach collection="list" item="greenPowerIntensityCarbonDataPO" index="index" separator=","> ( #{greenPowerIntensityCarbonDataPO.time}, #{greenPowerIntensityCarbonDataPO.data} ) </foreach>