如何选择包含关键字的行?

问题描述 投票:-1回答:5

MY_TABLE

id  name
1   Sam
4   Ben
7   Amy
8   Samantha

我想搜索名称包含Sa的记录。

我的疑问是

select * from my_table where 'Sa' like '%name%'

但没有返回结果

什么是正确的查询?

sql
5个回答
2
投票

试试吧

select * from my_table where name like '%sa%'

2
投票

您正在查询在“Sa”列中搜索文本“名称”,这应该如下所示

从my_table中选择*,其中名称为'%Sa%'


1
投票

我想我只是添加一个解释这个问题的答案,因为一些赞成的答案缺乏任何解释,甚至没有错。

SQL中的单引号表示字符串文字(字符串常量)。所以

where 'Sa' like '%name%'

询问字符串'Sa'是否包含字符串'name',而不是这种情况,因此查询不返回任何行。

不幸的是,有些DBMS对分隔符并不严格,并允许类似下面的内容而不引发错误:

select 1 as 'myalias'

在MySQL中(即使在当前版本8中),您可以这样做:

select 1 as 'myalias'
union all
select 3 as 'myalias' 
union all
select 2 as 'myalias' 
order by 'myalias';

得到一个无序的结果。为什么是这样?因为虽然没有抱怨as 'myalias'应该如此,MySQL正确地将order by 'myalias'解释为字符串常量'myalias'的排序,这对所有行都是相同的,因此不会进行排序。

结论:对分隔符要非常小心。单引号用于字符串文字。对于名称,我们通常不需要分隔符,因此as myalias是有效的。但是,如果别名或名称包含空格等特殊字符或等于保留的SQL字,则需要分隔符。这是标准SQL中的双引号(例如as "my alias"),但有些DBMS使用反引号或括号代替。我建议你完全避开这些名字。您可以使用下划线来获取可读的名称,而无需分隔符,例如: as my_alias

SQL qazxsw poi比较一个字符串(在左侧)和一个模式字符串(在右侧):

LIKE

两者都可以是列,表达式或字符串常量。通常,我们希望列中的内容与常量模式匹配。在你的情况下:

some_string LIKE some_pattern

但请注意,它取决于DBMS和校对是否where name like '%Sa%' 区分大小写。因此,在某些DBMS中,上面某些字符集可能也会匹配名称LIKE,尽管有小写的'Elsa'。请参阅您的DBMS文档。

'Sa'中的大写'S'表示您正在寻找以'Sa'开头的名字。在这种情况下,你可能想要寻找模式s而不是'Sa%'。但那不会找到'%Sa%',因为这个字符串不是以'Sa'开头的。请记住,你想要的两种模式中的哪一种。


0
投票

您的列名称是引号,不应该有效。按照惯例,我们在'Uncle Sam'子句之后的条件左侧使用列名。您宁愿将自己的查询复杂化并在聚光灯下进行处理。

where

0
投票

在单引号内使用字符串值而不是列

   select * from my_table 
      where name    --column_names
      like
    '%Sa%'              -- your expression

你的搜索值将在单引号内,%和select * from my_table where name like '%Sa%' 将在column之后

© www.soinside.com 2019 - 2024. All rights reserved.