[SQL]匹配包含的测试

Posted 断弦有谁知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[SQL]匹配包含的测试相关的知识,希望对你有一定的参考价值。

数据库:IBMInformix Dynamic Server Version 11.50.FC6

关于包含的测试

select unique PolicyNo[2]  FROM disallcomm_charge WHEREPolicyNo[2]  not like '[A-Z]'    -- 得到想要的结果
select unique  PolicyNo[2]  FROMdisallcomm_charge  WHERE PolicyNo[2]like  '[A-Z]'     --- 无结果 ,不懂为什么,,所以不用这种方式!!有大神知道忘留言  

select unique PolicyNo[2]  FROM disallcomm_charge WHEREPolicyNo[2]  not matches '[A-Z]'    --无结果 
select unique PolicyNo[2]  FROMdisallcomm_charge  WHERE PolicyNo[2]matches '[A-Z]'     --- 得到想要的结果,为了实现想要的,就只能用matches '[A-Z]'

select uniquePolicyNo[2]   FROMdisallcomm_charge   WHERe  PolicyNo[2] = '[A-Z]'       --无结果  ,,,不懂为什么,,所以不用这种方式!!有大神知道忘留言 
select unique PolicyNo[2]   FROMdisallcomm_charge  WHERE PolicyNo[2] <> '[A-Z]'     --是想要的结果,,搞不懂了  

matches和 = 号 居然不一样,可能在其他数据库是一样的吧,

like居然和matches不一样,这个诡异了,,,虽然我再informix数据库下一直用的matches。

 

查了下网上资料             

like 使用%代表任何字符
like 使用?代表单个字符
matches使用*代表任何字符
matches使用_代表单个字符

like的语法是一个SQL标准。
matches好象是informix自己的标准,说白了就是对matches支持会更好

 

                         

20160623


====================================================================
SELECT
    reason,
    category,
    COUNT(*),
    SUM(commdata)
FROM
    tmpkk
GROUP BY
    1,2 
结果:
2016年劳动竞赛4月[分摊]找单摊(全车退保批单扣回) 9 62 -3986.01     
---------------------------------------------------    
SELECT
    COUNT(*),
    SUM(commdata)
FROM
    tmpkk
WHERE
    statdate >= '20160501'
AND statdate <= '20160531'
AND reason matches '*2016年劳动竞赛4月[分摊]找单摊(全车退保批单扣回)*' ;
结果: (COUNT(*)) (SUM) 
        0          (NULL)     -----------看吧。你想要的 结果没查到。
-----------------------------------------------------------------
SELECT
    COUNT(*),
    SUM(commdata)
FROM
    tmpkk
WHERE
    statdate >= '20160501'
AND statdate <= '20160531'
AND reason matches '*找单摊*' ;
结果: 
(COUNT(*)) (SUM) 
62          -3986.01
=================================================================
== 改掉tmpkk中的说明后, 
=================================================================
SELECT
    reason,
    category,
    COUNT(*),
    SUM(commdata)
FROM
    tmpkk
GROUP BY
    1,2 
结果:
2016年劳动竞赛4月(分摊)找单摊(全车退保批单扣回)    9    62  -3986.01
-------------------------------------------
SELECT
    COUNT(*),
    SUM(commdata)
FROM
    tmpkk
WHERE
    statdate >= '20160501'
AND statdate <= '20160531'
AND reason matches '*2016年劳动竞赛4月(分摊)找单摊(全车退保批单扣回)*' ;
结果: 
(COUNT(*)) (SUM) 
62          -3986.01 ----------                                       这样就没问题了。。。
---------------------------------------------------------
SELECT
    COUNT(*),
    SUM(commdata)
FROM tmpkk
WHERE statdate >= '20160501' AND statdate <= '20160531'
AND reason matches '*找单摊*' ;
结果: 
(COUNT(*)) (SUM) 
62          -3986.01 
==================================================================
==================================================================
综上结论:
informix数据库中,说明中尽量不使用[],而用英文状态下的()代替!!!
==================================================================      

 

以上是关于[SQL]匹配包含的测试的主要内容,如果未能解决你的问题,请参考以下文章

SQL(MySQL):匹配字符串中任何单词的首字母?

SQL模糊匹配

T-SQL FTS 包含单个字符“n”匹配数字

忽略包含中的撇号

多词包含全文搜索仅在 SQL Server 中部分工作

有没有办法使用 python 的“匹配”语句来测试 Iterable 是不是包含模式?