SQL:匹配字符串模式,无论它是什么情况,列

时间:2015-04-29 09:56:32

标签: 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,因为,除非移除白色步长,所有这些字符串都是相同的。

grep()SQL的{​​{1}}等价物是否与R相同?

6 个答案:

答案 0 :(得分:2)

如果您只关注 SPACE CASE ,那么您需要两个功能:

  • 更换
  • UPPER / LOWER

例如,

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>
  

然后,输出应为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子句中的实际table_name

所以,你只需要这样做:

SELECT COUNT(*) FROM YOUR_TABLE 
  WHERE UPPER(REPLACE(STR, ' ', '')) = 'MYTECBITS'
/

答案 1 :(得分:1)

您可以使用类似

的内容
UPPER(REPLACE(userString, ' ', ''))

仅检查大写并删除空格。

答案 2 :(得分:1)

您可以在比较之前将语句转换为LOWER(),例如

LOWER(column_name) = LOWER(variable)

更具体:

LOWER(First_name) = LOWER('JoHn DoE')

将成为名字=' john doe'

对于你应该使用替换的间距,其格式为:

REPLACE(yourstring, ' ' , '')

' ' =空格字符用空字符串替换=''

所以你会这样做

WHERE LOWER(REPLACE(fieldname, ' ', '') = 'mytecbits'

答案 3 :(得分:1)

您需要使用计数来恢复受影响的数字,较低会将数据放入小写字母中,这样当您进行比较时可以将其设为小写。

要删除空格,请使用替换并将空格替换为空字符串以供比较:

Select COUNT(ColumnA) 
from table 
where Lower(Replace(ColumnB, ' ', '')) = 'mytecbits'

答案 4 :(得分:1)

如果您要查找一个特定字符串的实例数,无论大小写/空格如何,那么您需要执行以下操作 -

  • 忽略空白

  • 忽略案例

  • 计算字符串

  • 的实例数

所以你想要一个如下的查询 -

SELECT 
    COUNT(field)
FROM
    table
WHERE
    UPPERCASE(REPLACE(field, ' ', '')) = UPPERCASE(REPLACE(userstring, ' ', ''))

这会计算表格中fielduserstring相同的行数,当忽略大小写时(所有情况都使用UPPERCASE设置为相同的大小写,所以它是有效忽略),并忽略空格(使用fielduserstringREPLACE中移除空格

答案 5 :(得分:1)

由于REGEXP不区分大小写,因此可以通过使空格可选来获得匹配,例如:

SELECT count(field) FROM yourtable WHERE field REGEXP "MY *TEC *BITS";

注意:如果需要,您可以在&#34; MY&#34;之前添加空格或[[:<:]] (字边界)和#34; BITS&#34;之后的空格或[[:>:]]避免误报。