Mysql选择char中存在的所有行,但不存在最后一行

时间:2014-09-23 19:13:09

标签: mysql

我需要在MYSQL中使用SELECT查询,该查询将检索一个表中的所有行,其中字段值包含"?"具有一个条件的char:char不是最后一个字符

示例:

ID Field
1  123??see
2  12?
3  45??78??

返回的行将是ID 1和3中与给定条件匹配的行

我唯一的陈述是:

SELECT *
FROM table
WHERE Field LIKE '%?%' 

但是,MySQL查询并没有解决我的问题..

2 个答案:

答案 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) <> '?'

DEMO