在sql server

时间:2015-11-09 07:07:05

标签: sql sql-server tsql

我们需要在我们的网页中实施搜索功能。逻辑如下,

  1. 如果用户输入数字值,即staffid,则wildcard应用于工作人员table的staffid列。
  2. 如果用户输入字符串值,即staffname,则wildcard将应用于工作人员table的staffname列。
  3. 如何实现上面的场景是sql server?

    感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

正如我所提到的,更好的方法是有两个参数和分支搜索,具体取决于填充或一个查询。但如果你坚持这就是你如何做到这一点:

DECLARE @p VARCHAR(10) = 'jo'
--DECLARE @p VARCHAR(10) = '34'

DECLARE @t TABLE(StuffID INT, Name VARCHAR(100))
INSERT INTO @t VALUES
(1234, 'Michael Jordan'),
(7845, 'Scottie Pippen'),
(6541, 'Dennis Rodman'),
(1987, 'Phil Jackson')

SELECT * FROM @t
WHERE (@p NOT LIKE '%[^0-9]%' AND StuffID LIKE '%' + @p + '%') OR
      (@p NOT LIKE '%[^a-z]%' AND Name LIKE '%' + @p + '%')

这可以理解为:如果@p不包含StuffID列中的数字搜索以外的符号,或者Name列中不包含字符搜索以外的符号