2017-09-25 61 views
1

在我的sql查询中,我使用'%b-%'执行代码,查询返回0行。使用LIKE'%b-%'SELECT查询在MS SQL Server 2012上返回0行

这里是我的查询:

SELECT NAME, SURNAME, AGE FROM PERSONS WHERE NAME LIKE '%b-%' 

和不喜欢:

SELECT NAME, SURNAME, AGE FROM PERSONS WHERE NAME = 'b-rush' 

所有查询返回0行。

我有一个像'b-rush''b-rush1''b-rush2'

+1

显示一些样本数据 – WillardSolutions

+1

什么是DB你”的整理重新查询?是否偶然区分大小写(不寻常但会发生)。 – abatishchev

+1

愚蠢的问题,但因为你使用MS SQL Server,你确定你选择了正确的数据库吗? – DHLopez

回答

-2

更改当前选定的数据库值。

Correct Database Wrong database

这是后话,如果表的创建是凌乱的,可以发生。

假设你运行SQL Management Studio中的新查询:

CREATE TABLE test (temp nvarchar(7)) 

你有你在我的截图看到下拉菜单中选择法师。你已经创建一个测试表,但在主。通常,您不需要这样做,因此您可以在特定的数据库上创建它,而不是通过在查询中指定它或修改选定的下拉选项。

CREATE TABLE MyDatabase.dbo.test (temp nvarchar(7)) 

您现在已经在BOTH Master和MyDatabase上创建了表格。如果您运行了选择查询,它不指定数据库名称,它将使用该下拉列表中选定的任何内容。这可能是Master,这与你的数据不一样。

+1

来吧,它与OP问题无关,如果有的话,OP会得到一个错误。 OP表示他获得了0个结果。 –

+0

这取决于他如何做插入。如果由于某种原因,MASTER具有表(如果CREATE TABLE查询对Master执行时,这并不是不可能的),查询_will_不会返回任何结果,显然没有理由。无可否认,我应该更清楚。 – Cloud

+0

即使他在另一个数据库中创建了表,它将返回错误消息“找不到表名称,而不是0行 – Sami

2

正如@abatishchev提到的,该表可以有整理的差异,当核对

  • CI =不区分大小写的,你的查询将工作正常
  • CS =区分大小写的,你需要在查询

    DECLARE @PERSONS table (NAME_CASE_Insensitive varchar(30) COLLATE 
    Latin1_General_CI_AS_KS_WS NOT NULL 
             ,NAME_CASE_sensitive varchar(30) COLLATE 
    Latin1_General_CS_AS_KS_WS NOT NULL 
             ) 
    insert @PERSONS (NAME_CASE_Insensitive , NAME_CASE_sensitive) values 
    ('B-rush','B-rush'),('b-rush1','B-rush1'),('b-rush2','B-rush2') 
    

不区分大小写使用正确的情况下 - 返回所有

SELECT * FROM @PERSONS WHERE NAME_CASE_Insensitive = 'b-rush' 


NAME_CASE_Insensitive   NAME_CASE_sensitive 
------------------------------ ------------------------------ 
B-rush       B-rush 

区分大小写 - 返回什么

SELECT * FROM @PERSONS WHERE NAME_CASE_sensitive = 'b-rush' 
NAME_CASE_Insensitive   NAME_CASE_sensitive 
------------------------------ ------------------------------ 

不区分大小写 - 返回所有

SELECT* FROM @PERSONS WHERE NAME_CASE_Insensitive LIKE '%b-%' 

    NAME_CASE_Insensitive   NAME_CASE_sensitive 
    ------------------------------ ------------------------------ 
    B-rush       B-rush 
    b-rush1      B-rush1 
    b-rush2      B-rush2 

区分大小写 - 返回什么

SELECT* FROM @PERSONS WHERE NAME_CASE_sensitive LIKE '%b-%' 
NAME_CASE_Insensitive   NAME_CASE_sensitive 
------------------------------ ------------------------------ 

区分大小写 - 返回所有

SELECT* FROM @PERSONS WHERE NAME_CASE_sensitive LIKE '%B-%' 
NAME_CASE_Insensitive   NAME_CASE_sensitive 
------------------------------ ------------------------------ 
B-rush       B-rush 
b-rush1      B-rush1 
b-rush2      B-rush2 

正确喜欢区分大小写

SELECT* FROM @PERSONS WHERE NAME_CASE_sensitive LIKE '%[bB]-%' 
NAME_CASE_Insensitive   NAME_CASE_sensitive 
------------------------------ ------------------------------ 
B-rush       B-rush 
b-rush1      B-rush1 
b-rush2      B-rush2 
+0

正如我所说的,我的表是不区分大小写的。 – Xaithe