mysql - SQL:匹配字符串模式而不考虑大小写,列中的空格

标签 mysql sql regex agrep

我需要找出列中字符串的频率,而不考虑其大小写和任何空格。

例如,如果我的字符串是 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()

最佳答案

如果您只关心SPACECASE,那么您需要两个函数:

  • 替换
  • 上/下

例如,

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/

相关文章:

sql - 如何修复 Oracle 中 SQL 中的 "ORA-01801: date format is too long for internal buffer"错误

使用姓氏列的 MySql LIKE 运算符不起作用

java - 考虑捕获组中的空白

php - 带有 SSL 证书的网站

php - 数据库与 XML 文件的最小内容

MySQL - 最后插入的 ID 的返回组

regex - BigQuery REGEXP_MATCH 和口音 : boundary wildcard fails?

java - 将字符串转换为标记

php - 我如何在 Laravel 5.2 查询中返回自定义文本?

mysql - 如何将文本文件中的列名、数据加载到 MySQL 表中?