gpt4 book ai didi

Mysql 很特别 Like 要求

转载 作者:行者123 更新时间:2023-11-29 02:24:18 25 4
gpt4 key购买 nike

我的情况如下。

我在 mysql 表中的“productname”列中有以下记录。

Adults-Work-Blue-Green-Pink-Ghagra-Choli-Dupatta
Afro-Party-Retro-Wigs-Hair-Black-Curly-Gabbar

现在我想找到以 A 开头然后在第一个连字符 W 之后的记录。

如果我按如下方式编写查询,

select DISTINCT Item_Code, Item_Name
from tbl_stock_detail
where Item_Name like 'A%-W%'

它向我显示了两条记录。我只想在这里看到第一条记录,因为在 A 之后,W 是连字符之后的第一个字母。同样,如果我将其设置为“A%-W%-B%”,我希望它仅显示“A”之后的第一条记录,“W”是第一个连字符后的第一个字母,“B”是后的第一个字母第二个连字符。请记住,有 1000 条不同名称的记录,因此我们无法检查字符串长度。

我可以在 mysql 中编写这样的查询来检查顺序吗?

对不起,我不擅长正则表达式。使用正则表达式这可能是可能的。

请指教。

编辑问题如下:

我有这样一张唱片《长裙红亮片提克里舞》现在客户说,他只想根据这三个字符进行搜索,R : 红色T : 提克利S : 裙子

还有第二件事。如果 Skirt 和 Red 有 2 个空格而不是 1 个,我们的旧正则表达式将不起作用。但它应该可以工作,因为他们有时会错误地在 2 个单词之间添加多个空格。你能帮我满足这两个要求吗?

更多编辑:

这是静态的,但它给我一些 PHP 中的转义序列问题。下面是我的 php 代码,

<?php
$var = 'SRT';
for($i=0;$i<strlen($var);$i++)
{
$term = '^'.$var[$i].'|[- ]'.$var[$i];
if($i == 0)
$subquery0 .= " where Item_Name REGEXP '".$term."'";
else
$subquery0 .= " or Item_Name REGEXP '".$term."'";
}
?>

当我回显 $term 时,它只显示 '^S。但是如果我删除 |符号然后它显示完整的字符串。可能是管道符号需要转义序列我试过它为'//|'但它不起作用。对此有任何想法,或者我必须提出一个新问题,因为这是一个 PHP 问题?

最佳答案

正如 hjpotter92 在他的评论中建议的那样,您应该能够使用正则表达式来定位具有指定匹配项的行。

单个 LIKE 谓词不能执行这种类型的匹配。 (这需要了解每个组件的最大长度('Adults'、'Work' 等)以及一大堆笨重的 LIKE 谓词和'ed 和 or' 在一起以获得所有各种可能的长度。我们我们我们不想去那里。)

正则表达式没什么可怕的。正则表达式可以变得相当复杂,但这正是它们显示其力量并变得非常有用的地方。


要匹配第一个字符是“A”(大写或小写),后面跟一个连字符,紧跟在第一个连字符之后的是“W”,您可以这样做:

 WHERE Item_Name REGEXP '^A[^-]*-W'

类似地,从 A 开始,后跟(稍后)一个连字符,紧跟在下一个连字符之后的是“W”,然后(稍后)是另一个连字符和一个“B”

 WHERE Item_Name REGEXP '^A[^-]*-W[^-]*-B'

让我们一点一点地解压最后一个正则表达式:

^A

第一个插入符匹配字符串的开头,字符 A 匹配字符 A(注意:这是对我的数据库连接的不区分大小写的匹配)。也就是说,“从 A 或 a 开始”。

[^-]*

这部分匹配任意数量的不是连字符的字符。

-W

这部分匹配紧跟 W 的连字符。(由于前面的部分,这将是先前匹配的 A 之后出现的第一个连字符。)

[^-]*

同样,不是连字符的任意数量的字符(零个或多个)

-B

匹配紧跟 B 的连字符。同样,这将是匹配的 W 之后的第一个连字符。

字符串的其余部分可以是任何内容。

关于Mysql 很特别 Like 要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25753267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com