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 正则表达式