0

我正在自动化 excel,我有一个字符串,我从工作表中读取输入为 Variable1,2,3,4,5,6

如果它们留空,我希望它们是可选的,查询照常执行

  SELECT LEFT(Name, 5) 
  FROM Production.Product
  where 
  product.name like 'Variable1'
  product.brand like 'Variable2'
  prodcut.price > 'Variable3'
  prodcut.expirydate > 'Variable4'
  ORDER BY ProductID;
4

2 回答 2

0

尝试这样的事情:

SELECT LEFT(Name, 5) 
FROM Production.Product
WHERE
(Product.name like @Variable1 or @Variable1 IS NULL) AND
(Product.brand like @Variable2 or @Variable2 IS NULL) AND
(Product.price > @Variable3 or @Variable3 IS NULL) AND
(Product.expirydate > @Variable4 or @Variable4 IS NULL)
ORDER BY ProductID;
于 2013-08-28T22:26:12.920 回答
0

下面的查询应该可以解决问题:

SELECT LEFT(Name, 5) 
FROM Production.Product
WHERE
  ('Variable1' = '' OR product.name LIKE 'Variable1') AND
  ('Variable2' = '' OR product.brand LIKE 'Variable2') AND
  ('Variable3' = '' OR prodcut.price > 'Variable3') AND
  ('Variable4' = '' OR prodcut.expirydate > 'Variable4')
ORDER BY ProductID;

但是,您的查询看起来并不健康 ATM。一个可能在 MySQL 和 MSSQL 上运行的程序如下所示:

SELECT LEFT(Name, 5) 
FROM Production.Product
WHERE
  (@Variable1 = '' OR product.name LIKE @Variable1) AND
  (@Variable2 = '' OR product.brand LIKE @Variable2) AND
  (@Variable3 = '' OR prodcut.price > @Variable3) AND
  (@Variable4 = '' OR @Variable4 IS NULL OR prodcut.expirydate > @Variable4)
ORDER BY ProductID;

尽管如此,您首先必须确定可能仍会更改查询的变量的数据类型,并且您还必须将“*”和/或“%”通配符添加到您在 LIKE 或其他地方抛出的字符串中没有多大意义,'=' 会快得多。

希望这可以帮助。

干杯

于 2013-08-28T22:28:35.617 回答