mysql FUNCTION xxx.charindex does not exist

这是一个关于SQL查询优化的例子,展示了如何将`charindex`函数替换为`instr`函数,以提高查询效率。查询涉及到从notice表中筛选出特定条件的数据,这些条件通过`list`集合中的`id`进行判断,使用`or`连接多个条件。这种转换可能在处理大量数据时提升查询性能。

把charindex替换为instr

<select id="selectAllCount" resultType="Long" parameterType="list">
        select COUNT(1)
        from notice
        <where>
            <if test="list != null and list.size()>0 ">
                <foreach collection="list" item="id" open="(" close=")" separator="or">
                    instr(','+notice_org_ids+',',','+#{id}+',')>0
                </foreach>
            </if>
        </where>
    </select>
SELECT MAX(parent.FNAME) AS '科目名称', CASE WHEN CHARINDEX('.', tba.FNUMBER) > 0 AND CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) > 0 THEN LEFT(tba.FNUMBER, CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) - 1) ELSE tba.FNUMBER END AS '科目编码', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 1 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '一月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 2 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '二月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 3 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '三月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 4 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '四月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 5 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '五月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 6 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '六月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 7 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '七月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 8 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '八月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 9 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '九月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 10 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '十月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 11 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '十一月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 12 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '十二月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) BETWEEN 1 AND 12 AND dept.FMASTERID IS NOT NULL THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '年度合计' FROM T_BD_ACCOUNT tba LEFT JOIN T_BD_ACCOUNT_L tbal ON tba.FACCTID = tbal.FACCTID LEFT JOIN T_GL_VOUCHERENTRY tgve ON tba.FACCTID = tgve.FACCOUNTID LEFT JOIN T_GL_VOUCHER tgv ON tgve.FVOUCHERID = tgv.FVOUCHERID AND tgv.FACCTORGID = '101041' AND tgv.FYEAR = '2025' LEFT JOIN T_BD_FLEXITEMDETAILV tbf ON tgve.FDETAILID = tbf.FID LEFT JOIN (SELECT tbd.FMASTERID FROM T_BD_DEPARTMENT tbd JOIN T_BD_DEPARTMENT_L tbdl ON tbd.FDEPTID = tbdl.FDEPTID WHERE tbdl.FNAME = '冷柜中小业态' AND tbd.FUSEORGID = '101041') dept ON tbf.FFLEX5 = dept.FMASTERID LEFT JOIN -- 获取上级科目名称 ( SELECT tba.FNUMBER, tbal.FNAME FROM T_BD_ACCOUNT tba JOIN T_BD_ACCOUNT_L tbal ON tba.FACCTID = tbal.FACCTID WHERE tba.FUSEORGID = '101041' AND tba.FNUMBER IN ('6601.02','6601.06','6601.07','6601.09','6601.12','6601.13','6601.14','6601.15','6601.18','6601.20','6601.22','6601.23') ) parent ON CASE WHEN CHARINDEX('.', tba.FNUMBER) > 0 AND CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) > 0 THEN LEFT(tba.FNUMBER, CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) - 1) ELSE tba.FNUMBER END = parent.FNUMBER WHERE tba.FUSEORGID = '101041' AND ( tba.FNUMBER LIKE '6601.02%' OR tba.FNUMBER LIKE '6601.06%' OR tba.FNUMBER LIKE '6601.07%' OR tba.FNUMBER LIKE '6601.09%' OR tba.FNUMBER LIKE '6601.12%' OR tba.FNUMBER LIKE '6601.13%' OR tba.FNUMBER LIKE '6601.14%' OR tba.FNUMBER LIKE '6601.15%' OR tba.FNUMBER LIKE '6601.18%' OR tba.FNUMBER LIKE '6601.20%' OR tba.FNUMBER LIKE '6601.22%' OR tba.FNUMBER LIKE '6601.23%' ) GROUP BY CASE WHEN CHARINDEX('.', tba.FNUMBER) > 0 AND CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) > 0 THEN LEFT(tba.FNUMBER, CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) - 1) ELSE tba.FNUMBER END ORDER BY CASE WHEN CHARINDEX('.', tba.FNUMBER) > 0 AND CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) > 0 THEN LEFT(tba.FNUMBER, CHARINDEX('.', tba.FNUMBER, CHARINDEX('.', tba.FNUMBER) + 1) - 1) ELSE tba.FNUMBER END
最新发布
11-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值