@Override
    public Object parse(SourceData sourceData, int rowIndex, Context context) {
        Object stringObj = stringParser.parse(sourceData, rowIndex, context);
        Object delimObj = delimParser.parse(sourceData, rowIndex, context);
        Object countObj = countParser.parse(sourceData, rowIndex, context);
        if (stringObj == null || delimObj == null || countObj == null) {
            return null;
        }
        String str = OperatorTools.parseString(stringObj);
        String delim = OperatorTools.parseString(delimObj);
        int count = OperatorTools.parseBigDecimal(countObj).intValue();
        if (str.isEmpty() || delim.isEmpty() || count == 0) {
            return "";
        }
        boolean isRight = count < 0;
        count = Math.abs(count);
        ArrayList<Integer> startIndexList = findStart(delim, str);
        int size = startIndexList.size();
        if (size < count) {
            return str;
        }
        if (isRight) {
            int start = startIndexList.get(size - count);
            return str.substring(start + delim.length());
        } else {
            int start = startIndexList.get(count - 1);
            return str.substring(0, start);
        }
    }
SubstringIndexFunction  -> SUBSTRING_INDEX(str,delim,count)
description:
- Return NULL if any parameter is NULL;
- Return everything to the left of the last count occurrences of 'delim' (counting from the left), if 'count' is positive;
- Return everything to the right of the last count occurrences of 'delim' (counting from the right) if 'count' is negative.
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/string/SubstringIndexFunction.java