在 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/