在整数列上使用 Like 运算符进行过滤
Filtering with Like operator on integer column
我正在使用 mikro-orm
进行与数据库相关的操作。我的数据库实体有一个数字字段:
@Property({ defaultRaw: 'srNumber', type: 'number' })
srNumber!: number;
对应的数据库列(Postgresql)是:
srNumber(int8)
mikro-orm EntityRepository's findAndCount(where, option)
中where
参数的查询输入是:
repository.findAndCount({"srNumber":{"$like":"%1000%"}}, options)
翻译成:
select * from table1 where srNumber like '%1000%'
这里的问题是因为 srNumber
列不是字符串,类型不匹配导致查询失败。像 CAST(srNumber AS TEXT) like '%1000%'
那样转换它应该在 db.
中工作
有什么方法可以在这里指定字段转换吗?
您可以在查询中使用自定义 SQL 片段。要避开严格类型化的 FilterQuery
,您可以使用 expr
这只是一个身份函数(returns 它的参数),因此仅对 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
我正在使用 mikro-orm
进行与数据库相关的操作。我的数据库实体有一个数字字段:
@Property({ defaultRaw: 'srNumber', type: 'number' })
srNumber!: number;
对应的数据库列(Postgresql)是:
srNumber(int8)
mikro-orm EntityRepository's findAndCount(where, option)
中where
参数的查询输入是:
repository.findAndCount({"srNumber":{"$like":"%1000%"}}, options)
翻译成:
select * from table1 where srNumber like '%1000%'
这里的问题是因为 srNumber
列不是字符串,类型不匹配导致查询失败。像 CAST(srNumber AS TEXT) like '%1000%'
那样转换它应该在 db.
有什么方法可以在这里指定字段转换吗?
您可以在查询中使用自定义 SQL 片段。要避开严格类型化的 FilterQuery
,您可以使用 expr
这只是一个身份函数(returns 它的参数),因此仅对 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