【问题标题】:SQL Server return wrong result when I use LIKE当我使用 LIKE 时,SQL Server 返回错误的结果
【发布时间】:2014-06-05 08:23:09
【问题描述】:

我创建了一个新数据库"TEST",在其中添加一个新表"tblTest" 和1 列"Name"

插入一些记录:Minh, Tinh, Justin

create database TEST
go
use test
go
create table tblTest (Name varchar(50))
go
insert tblTest values ('Minh')
insert tblTest values ('Tinh')
insert tblTest values ('Justin')

然后我运行这个查询

Select * from tblTest where Name like '%in%'

结果是:贾斯汀。 (Minh 和 Tinh 不显示)

谁能告诉我如何解决这个问题?

【问题讨论】:

  • 应该可以。 “Select * from tblTest”返回什么?
  • 另外,从您的结果来看,第二个 % 似乎不存在。
  • 你能告诉我们创建和插入语句吗?
  • 我怀疑是外国字符。
  • 数据类型?我们可以假设它是一个 nvarchar 并且“Tinh”和“Minh”没有使用“IN”(作为英语)而是一些带有口音的外国东西,恰好看起来相似,但不相似?

标签: sql sql-server search sql-like


【解决方案1】:

检查这个例子,它给我你想要的结果。 First % 用于 preceed, Last % 用于successed。

declare @t table (name varchar(50))
insert into @t values('Minh'),('Tinh'),('Justin')

Select * from @t where Name like '%in%'

结果将是

name
Minh
Tinh
Justin

【讨论】:

  • 你试试我的例子。你最后的输出是什么?
  • 是的,我做到了。但输出又是“贾斯汀”。
【解决方案2】:

查看此查询是否正常工作并提供必要的输出。

with tblTest as
(
   Select 'Minh' name from dual union
   Select 'Tinh' name from dual union
   Select 'Justin' name from dual 
)
Select * from tblTest where Name like '%in%'

否则,使用以下命令从 tblTest 中删除所有记录:

DELETE from tblTest;

然后,使用以下方法插入记录:

INSERT INTO TBLTEST (NAME) VALUES ('Minh');
INSERT INTO TBLTEST (NAME) VALUES ('Tinh');
INSERT INTO TBLTEST (NAME) VALUES ('Justin');

现在尝试再次执行您的SELECT 查询。 正如@podiluska 指出的那样,可能会有一些外国垃圾字符。

【讨论】:

  • 我又重新安装了Windows,完全不行,结果还是一样。我有 3 台笔记本电脑,其中 2 台给出了错误的结果(相同的数据库,相同的查询)
  • @Kelvin 这不是 Windows,也不是 SQL Server。这是你的数据。
  • 根据使用的语法(“双”表),您正在使用 Oracle;问题是关于 MS SQL(可能的)不当行为。 Oracle 使用 LIKE 正常工作。
  • @podiluska 我在 3 台笔记本电脑中使用相同的数据库,其中 2 台给出了错误的结果,第 3 台给出了正确的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多