gpt4 book ai didi

MYSQL 检查子字符串中的偶数/奇数

转载 作者:行者123 更新时间:2023-11-29 12:04:46 28 4
gpt4 key购买 nike

我有一个查询,其中有一个条件来检查房间号是否为奇数/偶数。问题在于房间号与建筑物信息一起存储在字符串中。

以下是数据库中数据的格式:

ABC-0101A  (Odd)
ABC-0112B (Even)
ZYX-123A1 (Odd)
ZYX-456B1 (Even)

对于要被视为偶数/奇数的房间号,它取决于破折号后第一个字母之前的最后一个数字。

最佳答案

如果您可以将数字部分单独存储在另一列中,这将变得更加容易且性能更高。作为长期解决方案,我建议这样做。

但是这里可以使用正则表达式来匹配第一个数字之前的最后一位数字,一组偶数[02468]和一组奇数[13579] 带有 CASE 语句。

SELECT
CASE
WHEN room REGEXP '-[0-9]*[02468][A-Z]' THEN 'even'
WHEN room REGEXP '-[0-9]*[13579][A-Z]' THEN 'odd'
ELSE 'something else entirely'
END
FROM rooms

模式-[0-9]* 匹配文字连字符后跟零个或多个数字。然后重要部分是 [02468][13579] 设置为匹配必须出现在 [A-Z] 之前的偶数或奇数数字> 匹配下一个字母。

这是一个演示:http://sqlfiddle.com/#!9/464d1d/3

匹配均匀房间的示例:

SELECT 'ABC-0112B' REGEXP '-[0-9]*[02468][A-Z]';
+------------------------------------------+
| 'ABC-0112B' REGEXP '-[0-9]*[02468][A-Z]' |
+------------------------------------------+
| 1 |
+------------------------------------------+

匹配奇怪房间的示例:

SELECT 'ABC-0101A' REGEXP '-[0-9]*[13579][A-Z]';
+------------------------------------------+
| 'ABC-0101A' REGEXP '-[0-9]*[13579][A-Z]' |
+------------------------------------------+
| 1 |
+------------------------------------------+

匹配不以字母结尾的奇怪房间的示例:

SELECT 'ABC-0101A11' REGEXP '-[0-9]*[13579][A-Z]';
+--------------------------------------------+
| 'ABC-0101A11' REGEXP '-[0-9]*[13579][A-Z]' |
+--------------------------------------------+
| 1 |
+--------------------------------------------+

关于MYSQL 检查子字符串中的偶数/奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31706173/

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