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