我需要在列中找到字符串的频率,无论其大小写和任何空格。
例如,如果我的字符串是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
相同?
答案 0 :(得分:2)
如果您只关注 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>
然后,输出应为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, ' ', ''))
这会计算表格中field
与userstring
相同的行数,当忽略大小写时(所有情况都使用UPPERCASE
设置为相同的大小写,所以它是有效忽略),并忽略空格(使用field
从userstring
和REPLACE
中移除空格
答案 5 :(得分:1)
由于REGEXP不区分大小写,因此可以通过使空格可选来获得匹配,例如:
SELECT count(field) FROM yourtable WHERE field REGEXP "MY *TEC *BITS";
注意:如果需要,您可以在&#34; MY&#34;之前添加空格或[[:<:]]
(字边界)和#34; BITS&#34;之后的空格或[[:>:]]
避免误报。