SQL 服务器:Return NULL:SELECT * FROM table WHERE field LIKE '%'

SQL Server: Return NULL: SELECT * FROM table WHERE field LIKE '%'

您好,提前感谢您帮助菜鸟。我尝试了一些不同的搜索,但找不到 % 是备用值的示例,因此如果这是重复的线程,我深表歉意。

我的数据是这样的

Table 姓名 = stored_item

Item  |  Location |  Hu  
---------------------------
K134  |  LOC01    |  LP1  
K125  |  LOC02    |  LP2  
K345  |  LOC03    |  
K939  |  LOC05    |  LP5
K235  |  LOC05    |  LP5  

我需要查询 table 并且需要 return 基于 Hu 列上的 where 子句的结果。

代码如下所示:其中 x 可以是 Hu 或 % 的任何值,表示搜索所有值(包括空值)

DECLARE @hu nvarchar(15)
    SET @hu = 'X'

SELECT Item, Hu
FROM stored_item
WHERE Hu LIKE @hu 

如果 X = 'LP5' 那么结果应该是这样的:

Item  |  Location |  Hu  
---------------------------
K939  |  LOC05    |  LP5
K235  |  LOC05    |  LP5 

IF X = '%' 那么结果应该是这样的:

Item  |  Location |  Hu  
---------------------------
K134  |  LOC01    |  LP1  
K125  |  LOC02    |  LP2  
K345  |  LOC03    |  
K939  |  LOC05    |  LP5
K235  |  LOC05    |  LP5  

试试这个:

DECLARE @hu nvarchar(15)
SET @hu = 'X'

SELECT  Item, Hu
FROM    stored_item
WHERE   @hu = '%' OR Hu LIKE @hu 

在这种情况下,如果您的参数是 %,条件 @hu = '%' 将导致 WHERE 条件被忽略,否则将使用条件的第二部分

您还可以在要搜索的列上使用 COALESCE 函数。这会将 NULL 值转换为您选择的值。因为非 NULL 值将匹配 '%',所以使用此技术也会 return NULL 行。 通过这种方式,您可以将 @hu 的值与 LIKE 允许的常规通配符(例如 %)一起使用。例如,如果您只想 select 以 LP 开头的行,而不是 NULL 行,您可以将 @hu 设置为 'LP%'.

DECLARE @hu nvarchar(15)
SET @hu = '%'

SELECT  Item, Hu
FROM    stored_item
--The value you use in Coalesce should never exist in the table. This can be 
--accomplished by using a string that is longer than the Hu column could hold. 
--In my case, the Hu column is a VARCHAR(3), so 4 positions should be enough.
WHERE   COALESCE(Hu, 'XXXX') LIKE @hu 

我将此测试数据用于此查询:

CREATE TABLE stored_item
([Item] varchar(4), [Location] varchar(5), [Hu] varchar(3))
;

INSERT INTO stored_item
([Item], [Location], [Hu])
VALUES
('K134', 'LOC01', 'LP1'),
('K125', 'LOC02', 'LP2'),
('K345', 'LOC03', NULL),
('K939', 'LOC05', 'LP5'),
('K235', 'LOC05', 'LP5')
;

关于 COALESCE 函数的更多信息:https://msdn.microsoft.com/en-us/library/ms190349.aspx