【问题标题】:Filter of records in oracleoracle中的记录过滤
【发布时间】:2014-12-04 09:04:29
【问题描述】:

我在一个表中有一组记录

xyz_t
abc_y
pqr_12-11-2013
psq_1
App_tq2
xyzq_12-10-2014
lpqs_14-09-2012
llyt_23-09-2011
bytx_2
prdtc

我要输出

pqr_12-11-2013
xyzq_12-10-2014
lpqs_14-09-2012
llyt_23-09-2011

我的意思是只有那些以日期为后缀的记录。

提前致谢。

【问题讨论】:

    标签: regex oracle regex-negation


    【解决方案1】:
    select s from t 
    where regexp_like(s, '_[[:digit:]]{1,2}-[[:digit:]]{1,2}-[[:digit:]]{4}$');
    

    [:digit:] - 任何数字(你也可以使用\d

    {4} - 四次

    {1,2} - 一两次

    $字符串结尾(默认第一个回车被解释为结尾)

    【讨论】:

    • 您好,谢谢。但在实际程序中,它不会返回所有后缀为 _date 的行。你能再帮我一次吗?
    • @Rubab 你能举一个遗漏的字符串的例子吗
    • 嗨,我遇到了这个问题。实际上很少有记录像 xyz_12-2-2013 或 xyz_2-2-2013。所以我的意思是日期格式并非到处都是一样的 sa dd-mm-yyyy。它的一些在哪里 dd-m-yyyy 或 d-m-yyyy。你能看看这个吗?
    • 谢谢朋友。现在我得到了我真正想要的东西。谢谢哥们。
    【解决方案2】:

    使用正则表达式:

    select your_column_name
    from your_table
    where REGEXP_LIKE(your_column_name, '.*\d{2}-\d{2}-\d{4}$')
    

    【讨论】:

    • 你错过了日期之前的下划线。
    • 如果你想排除xxx01-01-2014这样的模式,那么你应该在正则表达式前面加上_。否则,它不是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2011-08-10
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多