微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在整数列上使用 Like 运算符进行过滤

如何解决在整数列上使用 Like 运算符进行过滤

我将 mikro-orm 用于与数据库相关的操作。我的数据库实体有一个数字字段:

@Property({ defaultRaw: 'srNumber',type: 'number' })
 srNumber!: number;

和对应的db列(Postgresql)是:

srNumber(int8)

wheremikro-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 举报,一经查实,本站将立刻删除。