SQL Server:返回NULL:SELECT * FROM表WHERE字段LIKE'%'

时间:2015-02-18 19:26:52

标签: sql-server null return-value isnull

您好,并提前感谢您帮助一个菜鸟。我尝试了一些不同的搜索,但找不到%是备用值的示例,所以如果这是一个重复的帖子,我会道歉。

我的数据看起来像这样

表名= stored_item

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

我需要查询表,并需要根据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 

如果X ='%'然后结果应如下所示:

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

2 个答案:

答案 0 :(得分:1)

试试这个:

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

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

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

答案 1 :(得分:1)

您还可以在要搜索的列上使用COALESCE功能。这会将NULL值转换为您选择的值。因为非NULL值将匹配'%',所以使用此技术也将返回NULL行。 这样,您可以将@hu的值与LIKE允许的常规通配符(例如%)一起使用。例如,如果您只想选择以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