如何解决在整数列上使用 Like 运算符进行过滤
我将 mikro-orm
用于与数据库相关的操作。我的数据库实体有一个数字字段:
@Property({ defaultRaw: 'srNumber',type: 'number' })
srNumber!: number;
和对应的db列(Postgresql)是:
srNumber(int8)
where
中 mikro-orm EntityRepository's findAndCount(where,option)
参数的查询输入为:
repository.findAndCount({"srNumber":{"$like":"%1000%"}},options)
翻译成:
select * from table1 where srNumber like '%1000%'
这里的问题是由于 srNumber
列不是字符串,因此存在类型不匹配并且查询失败。像 CAST(srNumber AS TEXT) like '%1000%'
一样投射它应该在 db 中工作。
有什么办法可以在此处以某种方式指定字段转换吗?
解决方法
您可以在查询中使用自定义 SQL 片段。要绕过严格类型的 FilterQuery
,您可以使用 expr
,它只是一个身份函数(返回其参数),因此仅对 TS 检查有效。
这样的事情应该可以工作:
import { expr } from '@mikro-orm/core';
const res = await repo.findAndCount({
[expr('cast(srNumber as text)')]: { $like: '%1000%' },},options);
https://mikro-orm.io/docs/entity-manager/#using-custom-sql-fragments
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。