2

我需要在列中找到字符串的频率,而不管它的大小写和任何空格。

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

4

6 回答 6

2

如果您只关心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>

那么,输出应该是 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'
/
于 2015-04-29T10:02:01.800 回答
1

你可以使用类似的东西

UPPER(REPLACE(userString, ' ', ''))

仅检查大写字母并删除空格。

于 2015-04-29T09:59:48.107 回答
1

您可以在比较它们之前将您的陈述转换为 LOWER() ,例如。

LOWER(column_name) = LOWER(variable)

更详细:

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

将成为名字 = 'john doe'

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

REPLACE(yourstring, ' ' , '')

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

所以你会做

WHERE LOWER(REPLACE(fieldname, ' ', '') = 'mytecbits'
于 2015-04-29T10:00:20.137 回答
1

您需要使用count来恢复受影响的数字,Lower会将数据放入小写,以便在进行比较时可以将其设为小写。

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

Select COUNT(ColumnA) 
from table 
where Lower(Replace(ColumnB, ' ', '')) = 'mytecbits'
于 2015-04-29T10:01:15.503 回答
1

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

  • 忽略空格

  • 忽略大小写

  • 计算字符串的实例数

所以你想要一个像下面这样的查询 -

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

这将计算表中field与 相同的行数userstring,当忽略大小写时(所有设置为相同的大小写 using UPPERCASE,因此它被有效地忽略),并且空格被忽略(空格从 thefielduserstringusing中删除REPLACE

于 2015-04-29T10:32:39.293 回答
1

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

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

注意:如果需要,您可以在“MY”之前添加一个空格或[[:<:]] (单词边界)[[:>:]] ,在“BITS”之后添加一个空格或一个空格,以避免误报。

于 2015-04-29T11:12:17.403 回答