基本上,我试图搜索b列中的值是否包含在a列中的单元格中
我当前正在使用公式
=IsnUMber(SEARCH(B1,$A:$A))
并在条件格式中使用它突出显示A列中包含来自B列的字符串的单元格。但是,它没有突出显示正确的单元格
有什么建议吗?
问题是您的ksql> create stream main_stream ( article struct< _id VARCHAR,title VARCHAR,text VARCHAR,action VARCHAR,url VARCHAR,feed_id VARCHAR,mode VARCHAR,score INTEGER,published_at VARCHAR,retrieved_at VARCHAR> ) with (KAFKA_TOPIC='articles',value_format='JSON');
ksql> create stream processed as select test(article) article from main_stream;
ksql> describe processed;
Name : processed
Field | Type
-------------------------------------------------------------------------------------------------------------------------------------------------------------
ROWTIME | BIGINT (system)
ROWKEY | VARCHAR(STRING) (system)
ARTICLE | STRUCT<_ID VARCHAR(STRING),RAW_TITLE VARCHAR(STRING),RAW_TEXT VARCHAR(STRING),PROCESSED_TITLE VARCHAR(STRING),PROCESSED_TEXT VARCHAR(STRING)>
-------------------------------------------------------------------------------------------------------------------------------------------------------------
For runtime statistics and query details run: DESCRIBE EXTENDED <Stream,Table>;
ksql> show queries;
Query ID | Kafka Topic | Query String
--------------------------------------------------------------------------------------------------------------------------------------------------------------
CSAS_processed_20 | processed | CREATE STREAM processed WITH (REPLICAS = 1,PARTITIONS = 1,KAFKA_TOPIC = 'processed') AS SELECT TEST(MAIN_STREAM.ARTICLE) "ARTICLE"
FROM MAIN_STREAM MAIN_STREAM;
--------------------------------------------------------------------------------------------------------------------------------------------------------------
ksql> describe function test;
Name : TEST
Overview : test udf
Type : scalar
Jar : /Users/ktawfik/libs/custom-udf.jar
Variations :
Variation : TEST(article STRUCT<_ID VARCHAR,TITLE VARCHAR,TEXT VARCHAR,ACTION VARCHAR,URL VARCHAR,FEED_ID VARCHAR,MODE VARCHAR,SCORE INT,PUBLISHED_AT VARCHAR,RETRIEVED_AT VARCHAR>)
Returns : STRUCT<_ID VARCHAR,RAW_TITLE VARCHAR,RAW_TEXT VARCHAR,PROCESSED_TITLE VARCHAR,PROCESSED_TEXT VARCHAR>
Description : test
article : A complete article object
公式正在返回值@Udf(description = "test",schema = "struct< _id VARCHAR,raw_title VARCHAR,raw_text VARCHAR,processed_title VARCHAR,processed_text VARCHAR>")
public Struct processDocument(
@UdfParameter(
schema = "struct< _id VARCHAR,retrieved_at VARCHAR>",value = "article",description = "A complete article object") Struct struct) {
Schema ARTICLE_SCHEMA = SchemaBuilder.struct()
.field("_id",Schema.STRING_SCHEMA)
.field("raw_title",Schema.STRING_SCHEMA)
.field("raw_text",Schema.STRING_SCHEMA)
.field("processed_title",Schema.STRING_SCHEMA)
.field("processed_text",Schema.STRING_SCHEMA)
.build();
Struct proStruct = new Struct(ARTICLE_SCHEMA);
proStruct.put("_id","1234");
proStruct.put("raw_title","RAW_TITLE___1234");
proStruct.put("raw_text","RAW_TEXT___1234");
proStruct.put("processed_title","TITLE____1234");
proStruct.put("processed_text","TEXT____1234");
System.out.println(proStruct);
// Struct{_id=1234,raw_title=RAW_TITLE___1234,raw_text=RAW_TEXT___1234,processed_title=TITLE____1234,processed_text=TEXT____1234}
return proStruct;
}
的数组,其中ISNUMBER(SEARCH(….
中的每一项都返回一个值。您需要知道这些项目中的任何是否匹配。
因此,对于您的公式,请考虑对数组公式进行修改
{FALSE;TRUE;FALSE;FALSE;...}
由于这是一个数组公式,因此您需要在按下 enter 的同时按住 ctrl + shift 来“确认”它。如果操作正确,Excel将按照公式栏中的说明在公式周围放置括号within_text
如果您不喜欢使用=OR(ISNUMBER(SEARCH(B1,$A:$A)))
输入方法,则可以使用以下公式,该公式将在没有匹配项的情况下返回零,在任何匹配项的情况下都不为零:
{...}
,
Excel的SEARCH
函数用于查找一个字符串在另一个字符串中的位置。通常,您可以这样使用它:
=SEARCH("String A","A Longer String Containing String A")
这将返回在第二个字符串中第一个字符串开始的字符索引,在本例中为28
。
您真正需要的是VLOOKUP
。由于您要进行文本搜索(子字符串),因此您需要将范围设置为文本类型而不是数字。
您应该执行以下操作:
在A列的右侧添加一个额外的列,并使用TEXT
函数将条目转换为文本形式:
=TEXT(A1,"@")
现在,您可以使用VLOOKUP
在此文本范围内执行子字符串匹配。当您不要求VLOOKUP
执行通配符时,它支持通配符(第4个参数应为FALSE
)。然后是您的公式:
=VLOOKUP("*" & C1 & "*",$B:$B,1,FALSE)
请注意,我已经将B列(文本列)作为查找范围,而C1
是包含要搜索的文本的单元格。
此方法还具有其他优点,它可以返回范围内的实际匹配条目,因此您不必手动查找。
获得结果后,可以对其应用条件格式。
,以第一个单元格(在这种情况下为A1
)为活动单元格突出显示A列(或A列起始单元格A1
中的相关范围),请使用以下公式作为条件格式规则:
=(SEARCH($B1,$A1)*(LEN($B1)>0))>0
逻辑是首先从主字符串中搜索给定的子字符串,然后将结果乘以
LEN($B1)>0
以排除为列B中的空白单元格返回的1
的结果。
注意:条件格式以array
的方式运行,因此即使公式仅查看范围第一行中的值,只要您使用相对(或在某些情况下使用绝对值)正确设置单元格引用并正确突出显示结果范围,然后再设置规则,此规则将以与数组第一行相同的方式应用,如本示例所示。