gpt4 book ai didi

php - 在大型 Mysql 数据库中搜索行 ID 中的确切日期

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:23 24 4
gpt4 key购买 nike

我有一个大约 10GB 的大型 mysql 数据库。数据库中的一个表称为

clients

在该表中有一个名为

的列
case

此客户的创建日期混入此列中的数字。

这是case中的一个条目示例

011706-0001

06 部分表示此客户端是在 2006 年创建的。我需要提取在 2015 年和 2016 年创建的所有客户端。所以我需要查询 case 为 15 或 16 的所有内容在破折号之前。

例如,000015-0000000016-0000

有没有办法只用 mysql 来做到这一点?我的思考过程是我必须查询整个专栏,然后使用 php preg_match()

我担心根据数据库的大小这会导致问题。

最佳答案

定位具有 case 列值的行,该列值包含 '06-'(字符 0 和 6 后跟破折号 ...

一种选择是使用 LIKE 比较运算符:

 SELECT ...
FROM clients t
WHERE t.case LIKE '%06-%'
ORDER BY ...

百分号字符是 LIKE 比较中的通配符,匹配任意数量的字符(零个、一个或多个)

MySQL 将需要为表中的每一 行评估该条件。 MySQL 不能使用索引范围扫描操作。

 SELECT ...
FROM clients t
WHERE t.case LIKE '%15-%'
OR t.case LIKE '%16-%'
ORDER BY ...

对于包含三个字符序列 '15-''16-' 的任何值,这将评估为 true。

如果 case 列中的值有更标准的格式,其中值总是以正好代表日期的六个字符开头 'mmddyy-nnnnn' 并且您只想要匹配第 5 个到第 7 个字符,您可以使用下划线通配符匹配任何一个字符(在 LIKE 比较中)例如......使用四个下划线

  t.case LIKE '____16-%'

或者您可以使用 SUBSTR 函数从 case 值中提取三个字符,并执行相等比较...

  SUBSTR(t.case,5,3) = '15-'

SUBSTR(t.case,5,3) IN ('15-','16-')

也可以使用 REGEXP 比较来代替 LIKE 比较。


在性能方面,上述所有方法都需要遍历表中的每一行,以评估比较条件。

如果那个日期值被存储为一个单独的列,作为一个 DATE 数据类型,并且有一个索引作为前导列,那么 MySQL 可以有效地使用范围扫描操作,对于这样的查询.. .

  WHERE t.casedate >= '2015-01-01'
AND t.casedate < '2017-01-01'

关于php - 在大型 Mysql 数据库中搜索行 ID 中的确切日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39752111/

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