在 STR_TO_DATE 中运行 MySQL REGEXP_SUBSTR 以从文本中提取日期时遇到问题
Posted
技术标签:
【中文标题】在 STR_TO_DATE 中运行 MySQL REGEXP_SUBSTR 以从文本中提取日期时遇到问题【英文标题】:Trouble running MySQL REGEXP_SUBSTR within STR_TO_DATE to extract date from text 【发布时间】:2021-05-21 11:47:25 【问题描述】:我在 STR_TO_DATE 中运行 mysql REGEXP_SUBSTR 以从文本字段中提取日期时遇到问题。
如果可以运行以下查询,并使用 REGEXP_SUBSTR 正确提取日期字符串。
SELECT REGEXP_SUBSTR('12/9/97 - Ependymoma!', '[0-9]1,2/[0-9]1,2/[0-9]1,2');
# '12/9/97'
如果我在 STR_TO_DATE 中硬编码日期字符串,我可以正确地将日期字符串转换为 DATE。
SELECT STR_TO_DATE('12/9/97', '%m/%d/%y');
# '1997-12-09'
但是,如果我在 STR_TO_DATE 中调用 REGEXP_SUBSTR,它会返回 NULL。
SELECT STR_TO_DATE(REGEXP_SUBSTR('12/9/97 - Ependymoma!', '[0-9]1,2/[0-9]1,2/[0-9]1,2'), '%m/%d/%y');
# NULL
我一直在为此苦苦挣扎。任何方向将不胜感激。 谢谢。
【问题讨论】:
未转载。 dbfiddle.uk/… 我还在 MySQL 8.0 的本地实例上进行了测试,它可以工作。它不返回 NULL。SELECT VERSION();
会为您返回什么?
SELECT VERSION() -> 8.0.12,在 Mac 上运行。谢谢。
尝试先将日期选择到局部变量中SELECT @tmp := REGEXP_SUBSTR('12/9/97 - Ependymoma!', '[0-9]1,2/[0-9]1,2/[0-9]1,2')
SELECT STR_TO_DATE(@tmp, '%m/%d/%y')
【参考方案1】:
尝试先将日期选择到局部变量中
SELECT @tmp := REGEXP_SUBSTR('12/9/97 - Ependymoma!', '[0-9]1,2/[0-9]1,2/[0-9]1,2')
SELECT STR_TO_DATE(@tmp, '%m/%d/%y');
也发布为answer
因为我无法让comment
显示两行,所以一团糟
顺便说一句:您原来的合并语句适用于 10.4.8-MariaDB
【讨论】:
谢谢。我尝试了局部变量,但没有奏效。诡异的。 Akina 的 dbfiddle 也有效。 这很奇怪,因为这两个语句是分开工作的,有常量。我想知道这是否与转换字符集有关?如果在两者之间添加select @tmp
会发生什么?另外,当你说it didn't work
发生了什么时,又是NULL
?
是的,如果不工作,它只会返回 NULL。我已经尝试了命令行和 MySQL 工作台,但没有成功。在两者之间使用 @tmp 也不起作用。感谢大家的帮助!我尝试了 PostgreSQL 的等效操作,没有任何问题。【参考方案2】:
感谢大家的帮助!一些评论者对我的代码没有任何问题,但我无法让它在我最近安装的 MySQL 版本中工作。我必须完成这项工作,所以我切换到 PostgreSQL 并且没有任何问题。
【讨论】:
以上是关于在 STR_TO_DATE 中运行 MySQL REGEXP_SUBSTR 以从文本中提取日期时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
mysql 之 str_to_date ()函数 和date_format()函数