我需要在MYSQL中使用SELECT查询,该查询将检索一个表中的所有行,其中字段值包含"?"具有一个条件的char:char不是最后一个字符
示例:
ID Field
1 123??see
2 12?
3 45??78??
返回的行将是ID 1和3中与给定条件匹配的行
我唯一的陈述是:
SELECT *
FROM table
WHERE Field LIKE '%?%'
但是,MySQL查询并没有解决我的问题..
答案 0 :(得分:4)
LIKE表达式还支持通配符“_
”,它只匹配一个字符。
所以你可以像下面的例子一样写一个表达式,并知道你的“?”不会是字符串中的最后一个字符。必须至少还有一个角色。
WHERE intrebare LIKE '%?_%'
来自@JohnRuddell的评论,
是的,这是真的,这将匹配字符串“??”因为“?”存在于不是最后一个字符的位置。
取决于OP是否意味着匹配。 OP说字符串“45 ?? 78 ??”是匹配,但目前尚不清楚他们是否打算“4578 ??”是一场比赛。
另一种方法是使用正则表达式,但这有点棘手,因为你必须转义文字“?”,所以它不会被解释为正则表达式元字符。然后也逃脱逃脱角色。
WHERE intrebare REGEXP '\\?[^?]'
答案 1 :(得分:2)
你可以添加一个额外的地方,其中最后一个字符不是?
SELECT *
FROM intrebari
WHERE intrebare LIKE '%?%' AND intrebare NOT LIKE '%?'
你也可以这样做
SELECT *
FROM intrebari
WHERE intrebare LIKE '%?%' AND RIGHT(intrebare,1) <> '?'