如何在Node.js Sequelize中实现忽略前导零的字符串匹配查询
解决Sequelize中带前导零的unit字段匹配问题
方案一:前端传入值预处理
直接在代码里把带前导零的unit转成无前置零的字符串,再进行精确匹配:
var obj = { code: '123', unit: '02' } // 处理unit:转成整数再转回字符串,自动去除前导零 const processedUnit = parseInt(obj.unit, 10).toString(); Model.findOne({ where: { addressPostalCode: obj.code, addressUnit: processedUnit } })
注:如果数据库中addressUnit存储的是数值类型,直接用parseInt(obj.unit, 10)作为查询值即可。
方案二:利用Sequelize数据库函数处理字段
通过Sequelize提供的数据库函数,在查询时对数据库字段和传入值统一处理,实现匹配:
场景1:addressUnit为数值类型
将传入的unit字符串转为整数,和数据库字段做数值匹配:
const { Op } = require('sequelize'); var obj = { code: '123', unit: '02' } Model.findOne({ where: { addressPostalCode: obj.code, addressUnit: { [Op.eq]: Sequelize.cast(obj.unit, 'INTEGER') } } })
场景2:addressUnit为字符串类型
使用ltrim函数去除双方的前导零后再匹配:
const { Op } = require('sequelize'); var obj = { code: '123', unit: '02' } Model.findOne({ where: { addressPostalCode: obj.code, [Op.and]: [ Sequelize.where( Sequelize.fn('ltrim', Sequelize.col('addressUnit'), '0'), Sequelize.fn('ltrim', obj.unit, '0') ) ] } })
内容的提问来源于stack exchange,提问作者miasen
相关产品推荐
相关产品推荐

