MySQL常用函数

本文介绍了SQL中的多个实用函数,如FIND_IN_SET用于查找字符串在列表中的位置,SUBSTRING_INDEX进行字符串分割,JSON_UNQUOTE与JSON_EXTRACT组合使用处理JSON数据,GROUP_CONCAT实现聚合拼接,CONCAT_WS连接字符串等,并提供了示例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FIND_IN_SET()

SELECT 
  FIND_IN_SET('A', 'A,B,C'),   #找到值   返回1
  FIND_IN_SET('D', 'A,B,C'),   #没找到值 返回0
  FIND_IN_SET('D', ''),        #第二个参数是空字符串 返回0
  FIND_IN_SET(NULL, 'A,B,C'),  #搜索值是null  返回null
  FIND_IN_SET('D', NULL);      #被搜索值null  返回null

注意:第二个参数可以是列名,不可以用SQL语句

SUBSTRING_INDEX()

	SELECT
    SUBSTRING_INDEX('www.mysql.com', 'z', 1), # www.mysql.com
    SUBSTRING_INDEX('www.mysql.com', '.', -2),# mysql.com
    SUBSTRING_INDEX('www.mysql.com', '.', 0); # null

三个参数(都必填):

参数1:可以是列名 ,也可以是String常量

参数2:分割符() 找不到该分隔符就返回"参数1"的值

参数3:N  可以是正数也可以是负数,正数从下标从1开始,负数从尾部下标-1开始(第三个参数不包括分隔符)

JSON_UNQUOTE() && JSON_EXTRACT() 【配套使用】

SELECT
	JSON_UNQUOTE ( 
	JSON_EXTRACT( JSON_EXTRACT (contentJson, '$.GeneralInformation' ), '$.PRName' ) 
	) AS PRDescription 
FROM
	FormData
JSON_UNQUOTE:去除 JSON 字符串值两边的双引号。
JSON_EXTRACT:把json对象当作一个map集合,根据键找到的值会保留双引号("abc"),需要使用JSON_UNQUOTE函数去除双引号,JSON_EXTRACT()可以嵌套使用,从内层到外层。

GROUP_CONCAT()

SELECT GROUP_CONCAT(state) 
FROM com_paasit_pai_core_processInstanceObj 

OUT: 2,2,2,3,2,2,2,2

SELECT GROUP_CONCAT(DISTINCT state ORDER BY state ASC separator '-' ) 
FROM com_paasit_pai_core_processInstanceObj 

OUT: 2-3

扩展属性:

DISTINCT 去重    ORDER BY 排序   SEPARATOR 连接符

建议:出参只有一个的时候使用,或者其他参数已分组的时候使用,切记不可在多个出参的SQL中直接使用GROUP_CONCAT函数,会造成数据丢失(其他出参只出现一列,使用GROUP_CONCAT函数的列,查出所有值合并一起)。

CONCAT_WS()

释义:使用分隔符连接后的多个字符串

SELECT CONCAT_WS('-',state,`status` ) 
FROM com_paasit_pai_core_processInstanceObj

OUT:2-2 2-3 3-3

SUBSTRING()

SELECT
	SUBSTRING( 'abcd1234', 1 );    #abcd1234
SELECT
	SUBSTRING( 'abcd1234', 1, 3 ); #abc

参数1:表示需要截取的字符串

参数2:表示从字符串的那个位置开始截取(字符串下标从1开始)

参数3:表示要截取多少位,如果不写,表示截取从参数2指定的位置开始剩下的全部字符

CAST()

释义:将任意类型的参数值转为指定的类型的值并返回

SELECT
    CAST('2022-02-28' AS DATE),  #日期
    CAST('10:10:10' AS TIME),    #时间
    CAST('2022-02-28 10:10:10' AS DATETIME);  #日期时间
SELECT
   CAST('123' AS UNSIGNED),       #整数
   CAST('123' AS DECIMAL(12,2)),  #小数
   CAST('张三' AS CHAR);          #json

ON DUPLICATE KEY UPDATE()

 批量新增和修改

<insert id="MaterialImportSQL02" parameterType="java.util.List">
        INSERT INTO pai_core_minth.com_paasit_pai_core_supplier (
        id,
        supplierCode,
        supplierNamecn,
        supplierNameen,
        tyoeRelationship
        )
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (
            #{item.id, jdbcType=VARCHAR},
            #{item.supplierCode, jdbcType=VARCHAR},
            #{item.supplierNamecn, jdbcType=VARCHAR},
            #{item.supplierNameen, jdbcType=VARCHAR},
            #{item.tyoeRelationship, jdbcType=VARCHAR}
            )
        </foreach>
        ON DUPLICATE KEY UPDATE
        supplierCode=VALUES(supplierCode),
        supplierNamecn=VALUES(supplierNamecn),
        supplierNameen=VALUES(supplierNameen),
        tyoeRelationship=VALUES(tyoeRelationship)
    </insert>

单个新增和修改

<insert id="insertOrUpdateCameraInfoByOne" paramerType="com.pojo.AreaInfo">
    insert into camera_info( cameraId,zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4Name)
    VALUES(
        #{cameraId},#{zone1Id},#{zone1Name}, #{zone2Id},
        #{zone2Name}, #{zone3Id}, #{zone3Name},
        #{zone4Id}, #{zone4Name},)
    ON DUPLICATE KEY UPDATE 
    cameraId = VALUES(cameraId),
    zone1Id = VALUES(zone1Id),zone1Name = VALUES(zone1Name),
    zone2Id = VALUES(zone2Id),zone2Name = VALUES(zone2Name),
    zone3Id = VALUES(zone3Id),zone3Name = VALUES(zone3Name),
    zone4Id = VALUES(zone4Id),zone4Name = VALUES(zone4Name)
</insert>

奇技淫巧(在开发中就不用在代码里set值,直接在SQL里生成ID和时间)

UUID():根据 RFC 4122 生成一个通用唯一标识符(UUID)并返回

NOW():按 YYYY-MM-DD hh:mm:ss 格式返回当前时间和日期

ifnull():如果第一个参数为 NULl,返回第二个参数,否则返回第一个参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值