MYSQL查询,是否可以在每个产品的第7位后找到包含一个;E";?

MYSQL查询,是否可以在每个产品的第7位后找到包含一个;E";?,mysql,sql,Mysql,Sql,我是MYSQL新手,正在尝试设置数据库 在未来,我将创建查询以生成有关已销售产品的报告 我的产品代码如下: 01CES22AEZ 是否可以在MYSQL中创建一个查询,以便我可以找到产品代码以“01”开头,并且“每个产品的第7位之后(因此我想忽略第7位之前的字符)”包含“E” 我只是想知道这是否可行 谢谢 附加: 好吧,我明白了 如果我的产品代码类似于01CES22AEZ 我可以用 select * from tablename where productcode like '01__

我是MYSQL新手,正在尝试设置数据库

在未来,我将创建查询以生成有关已销售产品的报告

我的产品代码如下:

01CES22AEZ
是否可以在MYSQL中创建一个查询,以便我可以找到产品代码以“01”开头,并且“每个产品的第7位之后(因此我想忽略第7位之前的字符)”包含“E”

我只是想知道这是否可行

谢谢


附加:

好吧,我明白了

如果我的产品代码类似于
01CES22AEZ

我可以用

select 
  *
from
 tablename
where productcode like '01______E_';
但如果我的产品代码类似于
01CES22AFDE
,并且我仍然希望产品代码包含“E”第11位数字

我猜上面的查询不起作用?

假设您的意思是“在第7个字符之后”,您可以使用正则表达式或类似的

where productcode like '01_____%Z%'
在这种情况下,最好使用
like
,因为模式以常量字符开头(与
%
\uu
相反),所以MySQL可以在列上使用索引

如果您可能只需要以
01
开头并以
Z
结尾的产品代码,那么可以使用:
where productcode,如“01”

,您可以执行以下操作:

SELECT * 
  FROM Customers
 WHERE City LIKE '01______E%';
select 
  *
from
 tablename
where productcode like '01______E_';

因为这个系列是从01开始的,所以我从01开始,接下来的6个字符可以是任何东西,因为我用了6次连字符(u),第7位是E,最后一个字符可以是任何东西。连字符代表任何一个字符。

虽然像
这样的
在这种情况下可能会表现得更好,因为它可能能够使用索引(我恐怕不知道这是否正确),但我认为使用regex选项也值得回答,因为它是一个有用的选项,特别是对于较小的数据集

您可能需要以下内容:

SELECT something
FROM table
WHERE productcode REGEXP '^01.{5}(?:.*[E|e].*)$'

它在字符串(
^
)的开头匹配一个精确的
01
,后跟任意5个字符,我们不关心
{5}
。下一部分是非捕获组
(?:)
,它将在第7个字符之后的剩余字符中的任何位置找到
E
E
(表示前面或后面可能有字符。
*。只有找到所有这些字符,才会找到匹配项。

要回答OP提出的其他问题,请执行以下操作:

但是如果我的产品代码像01CES22AFDE,我仍然想 包含“E”第11位数字的产品代码

我想上面的问题不起作用吧

您可以使用
LIKE
REGEX
执行此操作

类似方法:

由于要计算
e
之前的空格数,可以使用下划线,例如:

这是10x
\uu
,然后是
e
,意思是任意值的10,然后是
e
,然后是任意值。MySQL通常不区分大小写

正则表达式方法:

正如REGEX所展示的一样,它可以做几乎完全相同的事情

WHERE productcode REGEXP '^.{10}(?:[E|e].*)$'
这意味着您从字符串开始有10个字符,然后是
e
e
,然后是字符串后面的任意字符



总的来说,我希望你的附加问题能很容易地从已经给出的答案中解决。我就是这么做的。

是的,当然。有无数种方法,其中大多数方法在非常大的数据集中表现很差,因为它们不会使用索引。到目前为止,你有没有尝试过一些方法?MySQL唯一做不到的就是做一件好事d杯茶。但除此之外,我认为这是一个好问题。对于第11位数字E,您必须放置8倍连字符(u)01之后,此旧问题的状态如何?如果答案确实解决了问题,则应通过接受答案将其标记为已解决。这缺乏某种有用的解释。虽然此代码可能会回答问题,但提供有关为什么和/或如何回答问题的附加上下文将显著提高其长期价值。P请给出您的答案以添加一些解释。这缺少关于该方法为什么或如何工作的任何解释,而此代码可能会回答问题,提供有关为什么和/或如何回答问题的附加上下文将显著提高其长期价值。请您的答案添加一些解释。对于第11位数字E,您有要放置8次连字符(41;如果你能解释正则表达式的部分/语法以及它们与期望结果的关系,那就太好了。最好也用一个动词来表示喜欢。我想从OP上看,他在第7个字符后的任何地方都在寻找一个E,因此答案中的额外百分比和我的前面的
*
。@控制论家DaveOPs的进一步问题表明,他们希望将
e
作为第11位数字,我阅读了关于澄清固定位置匹配的扩展问题。一些答案只搜索第8位的
e
;但由于最初的建议是在第7位之后的任何位置找到它,OP正在检查如果它位于第11位,就会发生这种情况。任何固定长度匹配的东西都无法匹配某些可能性。
WHERE productcode REGEXP '^.{10}(?:[E|e].*)$'