对 Char 类型使用 Like 和 Concat
Using Like and Concat with Char Type
我有一个 MySQL 语句试图查找行的 ID (CHAR(36)
) 是否在字符串中。
我的说法是:
select * from `options`
where concat('%',`OptionID`,'%')
like '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}';
但这失败了,return 什么也没有,而
select * from `options` where
`OptionID`='4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8';
有效,return是我的行。我认为这是因为 ID 字段是 CHAR
字段而不是 VARCHAR
字段所以我尝试了这个
select * from `options` where
concat('%',cast(`OptionID` as char(38)) ,'%')
like '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}';
但这仍然没有用,现在我迷路了。我想避免遍历 json 字符串并创建一组条件,例如
(`OptionID`={$JsonKey[0]} OR `OptionID`={$JsonKey[1]} OR ... )
因为这些 json 字符串可能会变得非常大,但如果这是最佳选择,因为性能或我正在尝试做的事情无法以任何其他方式完成,那么我会就那样做吧。
这个概念可行,但你在倒退。您需要反转字段。
像这样:
select *
from `options`
where '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}'
like concat('%',`OptionID`,'%')
- Condensed Fiddle Example - 这展示了两种方法
我有一个 MySQL 语句试图查找行的 ID (CHAR(36)
) 是否在字符串中。
我的说法是:
select * from `options`
where concat('%',`OptionID`,'%')
like '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}';
但这失败了,return 什么也没有,而
select * from `options` where
`OptionID`='4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8';
有效,return是我的行。我认为这是因为 ID 字段是 CHAR
字段而不是 VARCHAR
字段所以我尝试了这个
select * from `options` where
concat('%',cast(`OptionID` as char(38)) ,'%')
like '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}';
但这仍然没有用,现在我迷路了。我想避免遍历 json 字符串并创建一组条件,例如
(`OptionID`={$JsonKey[0]} OR `OptionID`={$JsonKey[1]} OR ... )
因为这些 json 字符串可能会变得非常大,但如果这是最佳选择,因为性能或我正在尝试做的事情无法以任何其他方式完成,那么我会就那样做吧。
这个概念可行,但你在倒退。您需要反转字段。
像这样:
select *
from `options`
where '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}'
like concat('%',`OptionID`,'%')
- Condensed Fiddle Example - 这展示了两种方法