我有一个表,其中包含“内容”字段和“国家”字段。 我需要检查国家名称是否出现在文本内容中。
内容:
国家/地区:
使用like子句似乎是正确的选择,但我不知道如何使用国家/地区字段中的值进行此类检查。
答案 0 :(得分:1)
使用字典表的简单方法:
CREATE TABLE country(id INT, name NVARCHAR(100));
INSERT INTO country(id, name) VALUES (1, 'United States'), (2, 'France'), (3, N'ישראל');
SELECT *
FROM mytable m
JOIN country c
ON m.content LIKE '%' + c.name + '%';
当然,这不是防弹解决方案,因为根据语言和名词的大小写,国家可能会有所不同。
编辑:
如果国家/地区位于同一行:
SELECT *,
CASE WHEN m.content LIKE '%' + m.country + '%' THEN 'Present' ELSE 'None' END
FROM mytable m
答案 1 :(得分:0)
由于您只需要检查其他表中的数据,您可以只具有一个子查询,或者根据您的数据逐行进行操作,而无需像这样的子查询
SELECT Case
when Content Like '%'+country+'%'
then "Yes" else "No" end, content,
country from table ;
或通过子查询
SELECT
content,
country from table where content IN
(Select '%'+country+'%' from table )
;
答案 2 :(得分:0)
我想你想要
where Content like N'%' + country + N'%'
这将返回所在国家/地区所在的行。您似乎有多个字符集,所以我认为nvarchar()
是合适的。
答案 3 :(得分:-1)
使用PostgreSQL的答案。 我使用了position函数,但其他数据库也有类似的函数(例如,对于Oracle来说为instr)。
select * from $table_name$ a
where position(country in content) > 0;