您好,并提前感谢您帮助一个菜鸟。我尝试了一些不同的搜索,但找不到%
是备用值的示例,所以如果这是一个重复的帖子,我会道歉。
我的数据看起来像这样
表名= 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
答案 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