SQL,在字段值结尾处使用数据格式的过滤模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL,在字段值结尾处使用数据格式的过滤模式相关的知识,希望对你有一定的参考价值。

在SQl代码中,如何筛选出与以下模式匹配的值:

一些字符和最后一个下划线('_')之后的日期格式为DDMMYYYY,

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中的保留字,如果可以,请避免作为列名。

以上是关于SQL,在字段值结尾处使用数据格式的过滤模式的主要内容,如果未能解决你的问题,请参考以下文章

以 7 位数字结尾的字段的 Big Query SQL 正则表达式

sql修改字段值的范围

字段值以结尾的 Postgres SELECT 语句

SQL server 使用 内联结(INNER JOIN) 联结多个表 (以及过滤条件 WHERE, AND使用区别)

按值数组过滤核心数据数组字段

php中的mysql数据库的,字段默认值该怎么输入,啥格式?