如何以最低的成本(SQL)实现这个简单的场景?
(实现支持所有应用过滤器组合的存储过程。)
Table
name | dateOfbirth | phone | email
N1 | 01-01-1992 | P1 | E1
N2 | 12-08-1976 | P2 | E2
N3 | 09-11-1989 | P3 | E3
N4 | 04-06-1991 | P4 | E4
Filter
[x] Name
[x] dateOfbirth
[x] phone
[x] email
看到多年来以多种方式实现的SQL查询和过滤器。
我觉得现在是时候刷新了。
如果发现重复
,请标记/更正此问题
答案 0 :(得分:6)
每当我做可选过滤器时,我会选择一些代表所有数据的数据,然后使用以下内容:
SELECT name, dateOfbirth, phone, email
FROM Table
WHERE (@a_name = '' or name = @a_name)
AND (@a_date = '1900-01-01' or dateOfbirth = @a_date)
AND (@a_phone = '' or phone = @a_phone)
AND (@a_email = '' or email = @a_email)
答案 1 :(得分:2)
这会有任何帮助吗? @f1,...,@f4 are filters and assuming null if filtering not needed
SELECT name, dateOfBirth, phone, email
FROM YourTable
WHERE name = ISNULL(@f1,name) AND dateOfBirth = ISNULL(@f2,dateOfBirth) AND
phone = ISNULL(@f3,phone) AND email = ISNULL(@f4,email)