nodejs中where条件sql语句的字符串拼装

nodejs中where条件sql语句的字符串拼装

使用需求

使用nodejs操作数据库时需要拼装各种sql语句字符串,当然你也可以使用各种orm框架,但学习成本比较高,针对一般的业务,自己封装一些常用的拼装sql工具足以应付。
下面讨论一下拼装where条件语句时的情况。

直接的处理方式

通常复杂一点的查询都会有多个where条件,并且各个条件有可能传也可能不传,比如说有两个条件的情况:

function createSql(search,state) {
	let sql = ''
	if (search !== undefined && state === undefined) {
		sql = `where mac LIKE '%${search}%'`
	}else if (search === undefined && state !== undefined) {
		sql = `where state=${state}`
	}else if (search !== undefined && state !== undefined) {
		sql = `where mac LIKE '%${search}%' and state=${state}`
	}
	return sql
}

两个条件写了这么长,三个条件就。。。

封装成工具函数

封装成工具函数时一定要考虑其通用性,但是也要保证输入的参数是一个最简化的个体,满足使用需求即可,参数过于复杂就会让人很困惑,也失去了封装的意义。
最重要的还是抽象能力,写程序时经常听大神说要有抽象能力,可是自己始终就是处于一知半解的状态。这种情况下,必须抽象出一些规律来,不然按照常规方式写,就把自己坑死了。
经过思考,主要难点就是where和and拼接的时机,经过抽象,其实不管多少个参数,只有三种情况:

function createSql (search,state,projectId) {
    let sqlSearch = `mac LIKE '%${search}%'`
    let sqlState = `state=${state}`
    let sqlProject = `projectId=${projectId}`
    let whereArr = [
        {val: search, sql: sqlSearch},
        {val: state, sql: sqlState},
        {val: projectId, sql: sqlProject}
    ]
    let sqlWhere = createSqlWhere(whereArr)
    let sql = `SELECT * FROM robot ${sqlWhere?sqlWhere:''} limit 0,10;`
    return sql
}

function createSqlWhere(arr) {
    let sql = ''
    let _arr1 = arr.map(v => v.val)
    let _arr = _arr1.filter(v=> {
        let bool = !!v    //这里有坑,传0会被过滤掉
        return bool != false
    })
    if (_arr.length === 1) {
        arr.forEach((v) => {
            if (v.val) {
                sql = `where ${v.sql}`
            }
        })
    } else if (_arr.length > 1) {
        let state = true
        arr.forEach((v) => {
            if (v.val && state) {
                sql = `where ${v.sql}`
                state = false
            } else if (v.val && !state) {
                sql += ` and ${v.sql}`
            }
        })
    }
    return sql
}

抽象过后的三种情况:
1.参数全空
2.只有一个参数
3.有多个参数
参数全空可以不用写,直接return出去就行,所以其实就只有两种情况。

这样一个通用的工具函数就写完了,在哪里都可以开心的使用了。
此函数没有写or语句,还有个小坑,自己动手改造,才能提高哦。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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 使用条件语句拼接字符串,可以根据不同的条件生成灵活的查询语句,满足用户对数据的不同查询需求。但在实现时,需要注意安全性和合法性的验证,以避免潜在的风险。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值