前端sql条件拼接js工具

因为项目原因,需要前端写sql,所以弄了一套sql条件拼接的js工具

​
/*常量
LT : " < ",
LE : " <= ",
GT : " > ",
GE : " >= ",
NE : " != ",
EQ : " = ",
LIKE : " like ",
OR : " or ",
IN : " in ",
*/

let sqlUtil = {
    // 拼接sql
    buildSql : '',

    /*函数*/
    lt: lessThan,
    lte: lessThanOrEqual,
    gt: greaterThan,
    gte: greaterThanOrEqual,
    ne: notEqual,
    eq: equal,
    toLike: sqlLike,
    leftLike:leftLike,
    rightLike:rightLike,
    in: sqlIn,
    notIn: notIn,
    isNull: isNull,
    isNotNull: isNotNull,
    isEmpty: isEmpty,
    isEmptyOrNull: isEmptyOrNull,
    isNotEmpty:isNotEmpty,
    isNotEmptyAndNotNull:isNotEmptyAndNotNull,
    sor: simpleOr,
    toBetween: between,
    notBetween : notBetween,
    sqlOr: sqlOr,
    orderByDesc : orderByDesc,
    orderByAsc: orderByAsc,
    orderBy: orderBy,
    notDelete : notDelete,
    userDefined:userDefined,
    toSql: toSql
};

/**
 * 小于 <
 * sqlUtil.lt("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function lessThan(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" < '"+fieldValue+"' ";
    }
    return this;
}

/**
 * 小于等于 <=
 * sqlUtil.le("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function lessThanOrEqual(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" <= '"+fieldValue+"' ";
    }
    return this;
}

/**
 * 大于 >
 * sqlUtil.gt("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function greaterThan(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" > '"+fieldValue+"' ";
    }
    return this;
}


/**
 * 大于等于 >=
 * sqlUtil.ge("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function greaterThanOrEqual(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" >= '"+fieldValue+"' ";
    }
    return this;
}


/**
 * 不等于 !=
 * sqlUtil.ne("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function notEqual(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" != '"+fieldValue+"' ";
    }
    return this;
}

/**
 * 等于 =
 * sqlUtil.eq("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function equal(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }

    if(!fieldValue){
        return this;
    }

    if(typeof fieldValue === 'string' && fieldValue.trim() === ''){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" = '"+fieldValue+"' ";
    return this;
}

/**
 * 模糊搜索 like
 * sqlUtil.like("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function sqlLike(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        fieldValue = fieldValue.replaceAll('%','\\%');
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" like '%"+fieldValue+"%' ";
    }
    return this;
}

/**
 * 模糊搜索 左like
 * sqlUtil.leftLike("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function leftLike(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        fieldValue = fieldValue.replaceAll('%','\\%');
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" like '%"+fieldValue+"' ";
    }
    return this;
}



/**
 * 模糊搜索 右like
 * sqlUtil.rightLike("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function rightLike(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        fieldValue = fieldValue.replaceAll('%','\\%');
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" like '"+fieldValue+"%' ";
    }
    return this;
}

/**
 * in查询
 * sqlUtil.in("field_name",fieldValueArray)
 * @param fieldName 字段名
 * @param fieldValueArray 字段值数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function sqlIn(fieldName,fieldValueArray = [],condition = true){
    if(!condition){
        return this;
    }
    if (fieldValueArray.length === 0){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" in ( ";
    for (const fieldValue of fieldValueArray) {
        if(typeof fieldValue === "string"){
            sqlUtil.buildSql = sqlUtil.buildSql + "'" + fieldValue + "',";
        }else{
            sqlUtil.buildSql = sqlUtil.buildSql + fieldValue + ",";
        }

    }

    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + ") ";
    return this;
}

/**
 * not in查询
 * sqlUtil.notIn("field_name",fieldValueArray)
 * @param fieldName 字段名
 * @param fieldValueArray 字段值数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function notIn(fieldName,fieldValueArray = [],condition = true){
    if(!condition){
        return this;
    }
    if (fieldValueArray.length === 0){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" not in ( ";
    for (const fieldValue of fieldValueArray) {
        sqlUtil.buildSql = sqlUtil.buildSql + fieldValue + " ,";
    }

    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ) ";
    return this;
}


/**
 * is null
 * sqlUtil.isNull("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNull(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" is null '"+fieldValue+"%' ";
    }
    return this;
}


/**
 * is not null
 * sqlUtil.isNotNull("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNotNull(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" is not null '"+fieldValue+"%' ";
    }
    return this;
}


/**
 * 是否为空字符
 * sqlUtil.isEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isEmpty(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" = '' ";
    }
    return this;
}

/**
 * 是否为 空字符或null
 * sqlUtil.isEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isEmptyOrNull(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and ("+fieldName+" = '' or  "+fieldName+" is null)";
    }
    return this;
}

/**
 * 是否为空字符
 * sqlUtil.isNotEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNotEmpty(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" != '' ";
    }
    return this;
}

/**
 * 是否为空字符
 * sqlUtil.isNotEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNotEmptyAndNotNull(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and ("+fieldName+" != '' or  "+fieldName+" is not null)";
    }
    return this;
}

/**
 * between("age", 20, 22);
 * @param fieldName 字段名
 * @param fieldValue1  第一个值
 * @param fieldValue2 第二个值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */

function between(fieldName,fieldValue1,fieldValue2,condition = true){
    if(!condition){
        return this;
    }
    if(!fieldValue1 || !fieldValue2){
        return this;
    }

    if(typeof fieldValue1 === 'string' && typeof fieldValue2  === 'string'){
        //  有可能是日期
        sqlUtil.buildSql = sqlUtil.buildSql + "and '"+fieldName+"' between '"+fieldValue1+"' and '"+fieldValue2+"' ";
    }else{
        sqlUtil.buildSql = sqlUtil.buildSql + "and '"+fieldName+"' between "+fieldValue1+" and "+fieldValue2+" ";
    }

    return this;
}

/**
 * sqlUtil.notBetween("field_name",20,22)
 * notBetween("age", 20, 22);
 * @param fieldName 字段名
 * @param fieldValue1  第一个值
 * @param fieldValue2 第二个值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */

function notBetween(fieldName,fieldValue1,fieldValue2,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and '"+fieldName+"' not between "+fieldValue1+" and "+fieldValue2+" ";
    }
    return this;
}

/**
 * sqlUtil.orderByAsc("field_name") || sqlUtil.orderByAsc(["field_name1","field_name2"])
 * "order by id asc"
 * @param fieldName 字段名 || 数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function orderByAsc(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(typeof fieldName === 'string'){
        sqlUtil.buildSql = sqlUtil.buildSql +" order by "+fieldName+" asc"
    }else{
        sqlUtil.buildSql = sqlUtil.buildSql +" order by ";
        for (const itemName of fieldName) {
            sqlUtil.buildSql = sqlUtil.buildSql + itemName + " asc,";
        }
        sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ";
    }

    return this;
}

/**
 * sqlUtil.orderByDesc("field_name") || sqlUtil.orderByDesc(["field_name1","field_name2"])
 * "order by id desc"
 * @param fieldName 字段名 || 数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function orderByDesc(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(typeof fieldName === 'string'){
        sqlUtil.buildSql = sqlUtil.buildSql +" order by "+fieldName+" desc"
    }else{
        sqlUtil.buildSql = sqlUtil.buildSql +" order by ";
        for (const itemName of fieldName) {
            sqlUtil.buildSql = sqlUtil.buildSql + itemName + " desc,";
        }
        sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ";
    }

    return this;
}

/**
 * 自定义排序
 * @param fieldList 字段名或数组[{fileName:'',order:''}],order的值为 desc|asc
 * @param condition
 * @returns {orderBy}
 */
function orderBy(fieldList,condition = true){
    if(!condition){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql +" order by ";
    for (const item of fieldList) {
        sqlUtil.buildSql = sqlUtil.buildSql + item.fileName +" "+item.order +",";
    }
    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ";

    return this;
}



/**
 * 简单的或条件 or
 * const paramMap =  new Map([
 *   ["field_name1",fieldValue1],
 *   ["field_name2",fieldValue2],
 *   ["field_name3",fieldValue3],
 * ])
 *
 * sqlUtil.sor(paramMap)
 * @param paramMap  参数集
 *
 * @param condition
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function simpleOr(paramMap,condition = true){
    if(!condition){
        return this;
    }
    if(! paramMap){
        return this;
    }

    sqlUtil.buildSql += "and ( ";
    for(let [index,field] of paramMap.entries()){
        sqlUtil.buildSql = sqlUtil.buildSql + field[0]+" = '"+field[1]+"' or ";
    }
    sqlUtil.buildSql = sqlUtil.buildSql.substring(0, sqlUtil.buildSql.length - 4) +  ") ";

    return this;
}


/**
 * 或条件 or
 *
 * sqlUtil.OR(paramMap)
 * @param paramSqlList  sql集
 * @param condition
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function sqlOr(paramSqlList= [],condition = true){
    if(!condition){
        return this;
    }

    if(paramSqlList.length === 0){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql +" and (";
    for (const paramSql of paramSqlList) {
        sqlUtil.buildSql = sqlUtil.buildSql + " or "
    }
    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length - 3) + ") "

    return this;
}

/**
 * 查询没有被逻辑删除的
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function notDelete(){
    sqlUtil.buildSql += "and is_delete = '0' "
    return this;
}

/**
 * 自定义sql,
 * @param paramSql  'and {condition}'
 * @param condition  条件
 */
function userDefined(paramSql,condition = true){
    if(!condition){
        return this;
    }
    sqlUtil.buildSql += paramSql;
    return this;

}

/**
 * 获取拼装后的sql
 * @returns {string}
 */
function toSql(){
    let sql = '';
    //判断有没有orderBy
    if(sqlUtil.buildSql.indexOf("order by") != -1){
       let arr = sqlUtil.buildSql.split("order by");
       sql = arr[0] + " and is_delete = '0' "+"order by"+arr[1];
    }else{
        sql =  sqlUtil.notDelete()["buildSql"];
    }
    // sqlUtil.notDelete().buildSql

    sqlUtil.buildSql = '';
    console.log("sql:"+sql);
    return sql;
}

export default sqlUtil;

​

或许某些场景,例如用户自定义条件的场景才用得到吧?这篇文章如能提供到帮助,方便的话请在评论下留言,我也想知道还能用到什么地方。

使用方式参考如下(使用userDefined方法可以利用sql函数,并进行条件拼接):

return sqlUtil
          .toLike("discussion_title",searchParam.discussionTitle)
          .eq("division_code",searchParam.divisionCode)
          .eq("party_grid_deliberation_id",searchParam.partyGridDeliberationId)
          .userDefined(" and (DATE_FORMAT(discussion_time_start, '%Y-%m') = '"+this.searchParam.discussionYearMonth+"' or DATE_FORMAT(discussion_time_end, '%Y-%m') = '"+this.searchParam.discussionYearMonth+"') ",this.searchParam.discussionYearMonth)
          .orderByDesc("discussion_time_start")
          .toSql();

另外进阶版,可以结合jq的extend,进一步封装,像后端开发那样,把业务代码写到前端来。如图:

fwptPost(表名,提交的json对象)。

这样做当然是有缺陷,需要解决事务一致性的问题,要考虑如何联表,要考虑性能。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 SQL 中,条件语句可以使用 WHERE 子句进行筛选。要拼接 WHERE 子句中的条件语句,可以使用字符串拼接操作符(+)或 CONCAT 函数。 下面是一个示例 SQL 语句,其中使用了字符串拼接操作符: ``` DECLARE @condition VARCHAR(50) = 'age > 18' SELECT * FROM users WHERE status = 'active' AND ' + @condition + ' ``` 在上面的示例中,@condition 变量包含要拼接条件语句。字符串拼接操作符(+)用于将其添加到 WHERE 子句中。 下面是一个使用 CONCAT 函数的示例: ``` DECLARE @condition VARCHAR(50) = 'age > 18' SELECT * FROM users WHERE status = 'active' AND CONCAT(' ', @condition, ' ') ``` 在这个示例中,CONCAT 函数用于将 @condition 变量与其他字符串连接起来,并在它们之间添加空格。结果字符串被添加到 WHERE 子句中,以过滤出满足条件的记录。 ### 回答2: 在SQL中,我们可以使用条件语句来根据特定的条件来查询或更新数据库中的数据。拼接字符串是其中一种常见的用法。 在SQL中,我们可以使用一系列的条件语句来构建一个复杂的查询。最常见的条件语句之一是使用WHERE子句来设置查询的条件。 通过拼接字符串,我们可以动态地构建查询条件。例如,假设我们有一个数据库表格中的列名为"age",我们希望查询年龄大于等于18岁的数据,但是年龄这个条件是根据用户输入的变量动态变化的。 我们可以使用拼接字符串的方法来构建这个查询条件。首先,我们可以使用一个变量来存储用户输入的年龄值。然后,我们将这个变量的值与查询条件拼接起来。最后,我们将这个拼接好的字符串放入WHERE子句中。 例如,如果用户输入的年龄值为18,那么我们可以使用如下代码来拼接字符串: ``` DECLARE @age INT; SET @age = 18; DECLARE @sql VARCHAR(MAX); SET @sql = 'SELECT * FROM 表名 WHERE age >= ' + CAST(@age AS VARCHAR) + ';'; EXEC(@sql); ``` 在上述代码中,我们首先声明一个变量@age来存储用户输入的年龄值。然后,我们声明一个变量@sql来存储我们要拼接SQL语句。接着,我们使用加号将字符串和变量拼接起来。最后,我们使用EXEC命令来执行这个拼接好的SQL语句。 通过使用拼接字符串的方法,我们可以动态地构建查询条件,从而让我们的SQL语句更加灵活和可扩展。当然,在拼接字符串时,我们需要特别注意SQL注入攻击的风险,所以我们需要在拼接之前进行适当的过滤和转义等操作,以保证数据的安全性。 ### 回答3: 在 SQL 中,条件语句拼接字符串是指在查询语句中使用动态生成的字符串作为条件之一。 在实际应用中,我们可能需要根据特定的条件来查询数据。利用条件语句拼接字符串,可以根据不同的条件组合生成不同的查询语句,从而实现更灵活的数据查询。 例如,我们想要查询某张表中满足不同条件的数据。当用户选择了多个条件时,我们就需要将这些条件通过拼接字符串的方式动态生成查询语句。 SQL 条件语句拼接字符串的具体实现方式可以是使用字符串连接符(如“AND”、“OR”)将不同的条件连接在一起,形成一个完整的条件语句。 在拼接字符串的过程中,可以使用括号来保证条件之间的逻辑关系和优先级。此外,在使用动态生成的字符串拼接条件语句时,还需要注意对用户输入进行适当的验证,避免潜在的 SQL 注入风险。 总之,通过在 SQL 中使用条件语句拼接字符串,可以根据不同的条件生成灵活的查询语句,满足用户对数据的不同查询需求。但在实现时,需要注意安全性和合法性的验证,以避免潜在的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值