字符串函数split、array_contains

1、split(string str, string regex)函数:

TDW官方文档上的解释:

函数说明:
Splits str around occurances that match

用法示例:
SELECT split(‘ABCD:C:D:E’,’:’)[2] returns ‘D’.

那么,是否可以按照多个字符进行分割呢,答案是可以的。在指定多个分隔符的时候,需要用’|’符号隔开:

SELECT split('hello world,zhuoru',' |,')

返回的结果是一个数组:[[“hello”,”world”,”zhuoru”]]

2、array_contains(array arr, element)函数:

TDW官方文档上的解释:

函数说明:
Returns if the element is in the array, the element must hava same type as array

用法示例:
SELECT array_CONTAINS(ARRAY(0,1),0) returns true
SELECT array_CONTAINS(split(‘0=1’,’=’),’0’) returns true

3、两个函数的实际应用:

在处理SDK日志的时候,日志中的other字段有的有leakscan属性,有的没有,leakscan和它的值之间以^B间隔,leakscan和其他属性之间以^B间隔。有leakscan并且其值为’-‘表示是正常访问(没有leakscan的情形全部认为是正常访问),如果是漏洞扫描访问,leakscan的值不为空且不为’-‘。最终要完成的任务是查询出正常访问的记录。我是这样写查询SQL的:

SELECT
        *
    FROM
        mig_tdbank :: qqmap_openplatform_dsl_apikey_fht0
    WHERE
        tdbank_imp_date >= MACRO_DATA_DATE || '12'
        AND tdbank_imp_date <= MACRO_DATA_DATE || '13'
        AND SUBSTR(other, 8, 3) != '400'
        AND (
            array_CONTAINS(
                split(
                    other
                    ,'\\002'
                )
                ,'leakscan' || '\\003' || '-'
            ) = TRUE
            OR array_CONTAINS(
                split(
                    other
                    ,'\\002|\\003'
                )
                ,'leakscan'
            ) = FALSE
        ) limit 1000

在where判断条件中,

array_CONTAINS(
    split(
        other
        ,'\\002'
    )
    ,'leakscan' || '\\003' || '-'
) = TRUE

表示有leakscan并且其值为’-‘的情况。

array_CONTAINS(
    split(
        other
        ,'\\002|\\003'
    )
    ,'leakscan'
) = FALSE

表示没有leakscan的情况。通过这两个条件,就过滤掉了漏洞扫描方式的访问。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值