Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:使用<;=和>;=将字符串与通配符进行比较_Sql_Sql Server_Wildcard_String Comparison - Fatal编程技术网

SQL:使用<;=和>;=将字符串与通配符进行比较

SQL:使用<;=和>;=将字符串与通配符进行比较,sql,sql-server,wildcard,string-comparison,Sql,Sql Server,Wildcard,String Comparison,假设我有这样的表: Id | Name | Age ===================== 1 | Jose | 19 2 | Yolly | 26 20 | Abby | 3 29 | Tara | 4 我的查询语句是: 1) 从此表中选择*,其中Name='*Abby' 返回所有行;//第1-4行 5) 从这个表中选择*,其中Name>='*Abby'和Name='Abby'和Name这是因为,=和这是因为,=和通配符只有在使用类似的选择器时才会

假设我有这样的表:

Id  |  Name  |  Age
=====================
1   |  Jose  | 19

2   |  Yolly | 26

20  |  Abby  | 3

29  |  Tara  | 4
我的查询语句是:

1)
从此表中选择*,其中Name='*Abby'
返回所有行;//第1-4行


5)
从这个表中选择*,其中Name>='*Abby'和Name='Abby'和Name这是因为,
=
这是因为,
=
通配符只有在使用
类似的
选择器时才会被解释

因此,当您试图与字符串进行比较时,它将被逐字处理。因此,在比较中,使用了字典顺序

1)
*
之前没有字母,因此您没有返回任何行

2)
A
是字母表中的第一个字母,所以其余的名字都比艾比大,只有艾比和自己相等

3) (2的对立面)

4) 见1)

5) 见1)


6) 此条件相当于
Name='Abby'

通配符仅在使用
类似的
opterator时解释

因此,当您试图与字符串进行比较时,它将被逐字处理。因此,在比较中,使用了字典顺序

1)
*
之前没有字母,因此您没有返回任何行

2)
A
是字母表中的第一个字母,所以其余的名字都比艾比大,只有艾比和自己相等

3) (2的对立面)

4) 见1)

5) 见1)


6) 此条件相当于使用通配符替换字符串中的任何其他字符。它们与
WHERE
子句中的SQL
LIKE
运算符一起使用。比如说

Select * from thisTable WHERE name LIKE '%Abby%'
这将返回字符串中任何带有Abby的值


有关所有通配符的说明,请查看此链接。

通配符用于替换字符串中的任何其他字符。它们与
WHERE
子句中的SQL
LIKE
运算符一起使用。比如说

Select * from thisTable WHERE name LIKE '%Abby%'
这将返回字符串中任何带有Abby的值


查看此链接以了解所有通配符的说明在SQL Server中使用字符串时,会对每个字母进行排序,这些字母的排序顺序取决于排序规则。对于某些字符,排序方法更容易理解,它是按字母或数字顺序排列的:例如
'a'<'b'
'4'>'2'
。根据排序规则的不同,可以先字母后大小写(
'AaBbCc….'
),也可以先字母后大小写(
'ABC…Zabc'

让我们拿一个像
'Abby'
这样的字符串,它将按照字母a、b、b、y的顺序排序(它们的出现顺序将根据您的排序规则,我不知道它是什么,但我将假设a
'AaBbCc…
排序规则,因为它们更常见)。任何以
'Aba'
开头的字符串的值都比
'Abby'
要小,因为第三个字符(第一个不同的字符)的值较低。类似于
'Abbie'
'i'
的值低于
'y'
)。类似地,类似于
'Abc'
的字符串将具有更大的值,因为
'c'
的值高于
'b'
(这是第一个不同的字符)

如果我们把数字加入其中,你可能会大吃一惊。例如,字符串(重要的是,我没有说明编号)
'123456789'
值低于字符串
'9'
。这是因为第一个字符与第一个字符不同<代码>'9'
大于
'1'
,因此
'9'
具有“更高”的值。这就是为什么确保将数字存储为数字数据类型非常重要的原因之一,因为这种行为不太可能是您所期望的

然而,根据您的要求,SQL Server的通配符是
'%'
'.
(还有
'^'
,m,但我在这里不介绍这一点)。
'%
表示多个字符,而
'
表示单个字符。如果要特别查找其中一个字符,则必须在括号中引用它们(
[]

使用equals(
=
)运算符不会解析通配符。你需要使用一个函数,比如。因此,如果您想要一个以
'a'
开头的单词,可以使用表达式
WHERE ColumnName,比如'a%'
。如果您想搜索一个由6个字符组成并以
'ed'
结尾的字符,您可以使用
WHERE ColumnName,比如“\uuuuuuuuuuuued”

就像我之前说的,如果你想搜索其中一个特定的角色,你可以引用。因此,如果要搜索包含下划线的字符串,语法应该是
WHERE ColumnName,比如“%[\u]%”


编辑:同样值得注意的是,当使用像
这样的
时,它们会受到排序规则敏感性的影响;例如,大小写和重音。例如,如果您使用的是区分大小写的排序规则,那么语句
中的'Abby'像'abb%'
是不正确的,而
'a'
'a'
不是同一个大小写。与wise一样,语句
中的'cova'='Covéa'
在区分重音的排序规则中是错误的(
'e'
'e'
不被视为同一个字符)。

在SQL Server中处理字符串时,对每个字母进行排序,这些字母的排序顺序取决于排序规则。对于某些字符,排序方法更容易理解,它是按字母或数字顺序排列的:例如
'a'<'b'
'4'>'2'
。根据排序规则,这可以通过字母和字母来完成