我需要找出列中字符串的频率,而不考虑其大小写和任何空格。
例如,如果我的字符串是 My Tec Bits
并且它们出现在我的表中,如下所示:
061 MYTECBITS 12123
102 mytecbits 24324
103 MY TEC BITS 23432
247 my tec bits 23243
355 My Tec Bits 23424
454 My Tec BitS 23432
然后,输出应该是 6
,因为去掉白色字符并且不管大小写,所有这些字符串都是相同的。
在 SQL
中是否有与在 R
中等效的 grep()
?
最佳答案
如果您只关心SPACE 和CASE,那么您需要两个函数:
- 替换
- 上/下
例如,
SQL> WITH DATA AS(
2 SELECT 'MYTECBITS' STR FROM DUAL UNION ALL
3 SELECT 'mytecbits' STR FROM DUAL UNION ALL
4 SELECT 'MY TEC BITS' STR FROM DUAL UNION ALL
5 SELECT 'my tec bits' STR FROM DUAL UNION ALL
6 SELECT 'MY TEC BITS' STR FROM DUAL UNION ALL
7 SELECT 'MY TEC BITS' STR FROM DUAL
8 )
9 SELECT UPPER(REPLACE(STR, ' ', '')) FROM DATA
10 /
UPPER(REPLA
-----------
MYTECBITS
MYTECBITS
MYTECBITS
MYTECBITS
MYTECBITS
MYTECBITS
6 rows selected.
SQL>
Then, the output should be 6
因此,基于此,您需要在过滤谓词 和COUNT(*) 返回的行中使用它:
SQL> WITH DATA AS(
2 SELECT 'MYTECBITS' STR FROM DUAL UNION ALL
3 SELECT 'mytecbits' STR FROM DUAL UNION ALL
4 SELECT 'MY TEC BITS' STR FROM DUAL UNION ALL
5 SELECT 'my tec bits' STR FROM DUAL UNION ALL
6 SELECT 'MY TEC BITS' STR FROM DUAL UNION ALL
7 SELECT 'MY TEC BITS' STR FROM DUAL
8 )
9 SELECT COUNT(*) FROM DATA
10 WHERE UPPER(REPLACE(STR, ' ', '')) = 'MYTECBITS'
11 /
COUNT(*)
----------
6
SQL>
注意 WITH
子句仅用于构建示例表 用于演示 目的。在我们的实际查询中,删除整个 WITH 部分,并在 FROM 子句 中使用您的实际表名。
所以,你只需要做:
SELECT COUNT(*) FROM YOUR_TABLE
WHERE UPPER(REPLACE(STR, ' ', '')) = 'MYTECBITS'
/
关于mysql - SQL:匹配字符串模式而不考虑大小写,列中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29940277/