gpt4 book ai didi

mysql - rlike 表达式或替代查询中的性能?

转载 作者:行者123 更新时间:2023-11-29 00:19:15 27 4
gpt4 key购买 nike

从制表符分隔值中导入某些表后,我正在对它们进行一系列更新。数据带有我不喜欢的格式的日期。我将它们作为字符串引入,对其进行操作,使它们与 MySQL 日期的格式相同,然后转换该列。或者有时不是,但我希望它们像 MySQL 日期一样,即使它们是字符串。

它们以“1/4/2013 12:00:00 AM”或“11/4/2012 2:37:45 PM”开头。

我将它们变成“2013-01-04”(通常,因为即使原始模式仅明确指定日期,时间也会存在)和“2012-11-04 14:37:45”。

我正在使用 rlike。这不使用索引?哇。太糟糕了。

但是,对于每一列,我必须使用 4 次更新来处理不同的情况(“1/7”、“2/13”、“11/2”、“12/24”)。如果我使用 like 来做这些,每列可能需要 16 次不同的更新....

而且,如果我没看错的话,我什至无法从 rlike 表达式中获取位置参数,是吗?你知道,括号中的表达式部分变为 $1 或 $2....

因此,似乎用 perl 预处理 tsv 文件会更快。真的吗?哇。同样,这很糟糕。

还有其他建议吗?每次我需要提取数据时,我不能让这花费 3 个小时。

最佳答案

回想一下 Jamie Zawinski 1997 年的经典名言:

Some people, when confronted with a problem, think "I know, I'll use regular expressions."
Now they have two problems.

您是否尝试过使用 STR_TO_DATE() ?这正是用于将非标准日期/时间字符串解析为规范的日期时间值。

如果您尝试使用 STR_TO_DATE() 进行解析并且字符串与预期格式不匹配,则该函数返回 NULL。

因此您可以尝试以不同的格式进行解析,并返回第一个给出非空结果的格式。

UPDATE mytable
SET datecolumn = COALESCE(
STR_TO_DATE(stringcolumn, '%m/%d'),
STR_TO_DATE(stringcolumn, '%d/%m/%Y'),
...etc.
);

我不知道你的不同情况是什么。可能会也可能不会一次涵盖所有情况。

如您所说,另一种选择是在将原始数据加载到 MySQL 之前使用 Perl 对其进行预处理。但即便如此,也不要与正则表达式作对,使用 Date::Parse相反。

关于mysql - rlike 表达式或替代查询中的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21743084/

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