SQL:匹配一个字符串模式,不管大小写,列中的空格
SQL: match a string pattern irrespective of it's case, whitespaces in a column
我需要找出列中字符串的频率,而不考虑其大小写和任何空格。
例如,如果我的字符串是 My Tec Bits
并且它们出现在我的 table 中,如下所示:
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
,因为去掉白色 pace 并且不管大小写,所有这些字符串都是相同的。
在 SQL
中是否有任何 grep()
与 R
中的等价物?
你可以使用
UPPER(REPLACE(userString, ' ', ''))
仅检查大写并删除白色 space。
您可以在比较它们之前将您的语句转换为 LOWER(),例如。
LOWER(column_name) = LOWER(variable)
更具体:
LOWER(First_name) = LOWER('JoHn DoE')
将成为名字 = 'john doe'
对于您应该使用替换的间距,其格式为:
REPLACE(yourstring, ' ' , '')
' ' = 一个 space 字符用空字符串替换它 = ''
所以你会这样做
WHERE LOWER(REPLACE(fieldname, ' ', '') = 'mytecbits'
您需要使用count来取回受影响的数字,Lower会将数据转为小写,这样当您进行一个比较,你可以把它变成小写。
要删除 space,然后使用 Replace 并将 space 替换为空字符串以进行比较:
Select COUNT(ColumnA)
from table
where Lower(Replace(ColumnB, ' ', '')) = 'mytecbits'
如果您只关心 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>
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
子句仅用于为 构建 示例 table演示 目的。在我们的实际查询中,删除整个 WITH 部分,并在 FROM 子句 中使用您的 实际 table_name。
所以,您只需要做:
SELECT COUNT(*) FROM YOUR_TABLE
WHERE UPPER(REPLACE(STR, ' ', '')) = 'MYTECBITS'
/
如果您要查找一个特定字符串的实例数,而不考虑大小写/空格,那么您需要执行以下操作 -
忽略空格
忽略大小写
计算字符串出现的次数
所以您需要如下查询 -
SELECT
COUNT(field)
FROM
table
WHERE
UPPERCASE(REPLACE(field, ' ', '')) = UPPERCASE(REPLACE(userstring, ' ', ''))
这会计算 table 中的行数,其中 field
与 userstring
相同,忽略大小写(使用 [=13 设置为相同的大小写) =],所以它被有效地忽略了),并且空格被忽略了(使用 REPLACE
从 field
和 userstring
中删除了空格)
由于 REGEXP 不区分大小写,您可以通过将 spaces 设为可选来获得匹配,例如:
SELECT count(field) FROM yourtable WHERE field REGEXP "MY *TEC *BITS";
注:如有需要,可在"MY"前加space或[[:<:]]
(字界)和space 或 "BITS" 之后的 [[:>:]]
以避免误报。
我需要找出列中字符串的频率,而不考虑其大小写和任何空格。
例如,如果我的字符串是 My Tec Bits
并且它们出现在我的 table 中,如下所示:
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
,因为去掉白色 pace 并且不管大小写,所有这些字符串都是相同的。
在 SQL
中是否有任何 grep()
与 R
中的等价物?
你可以使用
UPPER(REPLACE(userString, ' ', ''))
仅检查大写并删除白色 space。
您可以在比较它们之前将您的语句转换为 LOWER(),例如。
LOWER(column_name) = LOWER(variable)
更具体:
LOWER(First_name) = LOWER('JoHn DoE')
将成为名字 = 'john doe'
对于您应该使用替换的间距,其格式为:
REPLACE(yourstring, ' ' , '')
' ' = 一个 space 字符用空字符串替换它 = ''
所以你会这样做
WHERE LOWER(REPLACE(fieldname, ' ', '') = 'mytecbits'
您需要使用count来取回受影响的数字,Lower会将数据转为小写,这样当您进行一个比较,你可以把它变成小写。
要删除 space,然后使用 Replace 并将 space 替换为空字符串以进行比较:
Select COUNT(ColumnA)
from table
where Lower(Replace(ColumnB, ' ', '')) = 'mytecbits'
如果您只关心 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>
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
子句仅用于为 构建 示例 table演示 目的。在我们的实际查询中,删除整个 WITH 部分,并在 FROM 子句 中使用您的 实际 table_name。
所以,您只需要做:
SELECT COUNT(*) FROM YOUR_TABLE
WHERE UPPER(REPLACE(STR, ' ', '')) = 'MYTECBITS'
/
如果您要查找一个特定字符串的实例数,而不考虑大小写/空格,那么您需要执行以下操作 -
忽略空格
忽略大小写
计算字符串出现的次数
所以您需要如下查询 -
SELECT
COUNT(field)
FROM
table
WHERE
UPPERCASE(REPLACE(field, ' ', '')) = UPPERCASE(REPLACE(userstring, ' ', ''))
这会计算 table 中的行数,其中 field
与 userstring
相同,忽略大小写(使用 [=13 设置为相同的大小写) =],所以它被有效地忽略了),并且空格被忽略了(使用 REPLACE
从 field
和 userstring
中删除了空格)
由于 REGEXP 不区分大小写,您可以通过将 spaces 设为可选来获得匹配,例如:
SELECT count(field) FROM yourtable WHERE field REGEXP "MY *TEC *BITS";
注:如有需要,可在"MY"前加space或[[:<:]]
(字界)和space 或 "BITS" 之后的 [[:>:]]
以避免误报。