mysql - SQL,在字段值末尾具有数据格式的过滤模式

标签 mysql sql postgresql pattern-matching sql-like

在 SQl 代码中如何过滤掉与以下模式匹配的值:

一些字符以及最后一个下划线('_')后面有一个格式为 DDMMYYY 的日期,

示例

values
-----
hello01122015
hello_2000
22_text_01022015
hello_again_22012015

结果:

22_text_01022015
hello_again_22012015

问候

最佳答案

您可以使用简单的正则表达式 '_[0-9]{8}$' 来检查实际日期是否有效:

-- with PostgreSQL
select *
from   t
where  values ~ '_[0-9]{8}$' and
       to_char(to_date(right(values, 8), 'DDMMYYYY'), 'DDMMYYYY') = right(values, 8);

-- with MySQL
select *
from   t
where  `values` regexp '_[0-9]{8}$' and
       str_to_date(right(`values`, 8), '%d%m%Y') is not null;

或者,您可以使用更强大的正则表达式,例如 '_(0[1-9]|[12][0-9]|3[01])(0[1-9]|1 [0-2])[0-9]{4}$',但这并不是万无一失的(这可以接受一些无效日期)。

SQLFiddle:对于 PostgreSQL ,对于 MySQL

注意:values是SQL中的保留字,如果可以的话,请避免作为列名。

关于mysql - SQL,在字段值末尾具有数据格式的过滤模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28101920/

相关文章:

SQL 使用 COUNT(*) 设置列的值

php - Propel 1.7 参数映射到 unix 时间

mysql - MySQL如何比较日期时间并获取第一个和最后一个日期

sql - 如何在 google spanner 中使用空间查询

sql - "every table"上自动递增键的优缺点

ruby-on-rails - 使用数据结构的gem在Rails中进行Postgresql复制

mysql - Zabbix Admin用户更改为标准用户

php - 如何链接两台不同机器上的两个mysql数据库?

php - 如何使用 PHP 中的过程获取数据?

sql - 在 postgresql 9.5 中是否可以从 WITH 查询中插入冲突更新?