我正在尝试通过名称或电话号码,基于两个不同的实例,在postgres数据库中查询类似的查询参数。我也想知道带来比赛的专栏。
我使用了Ilike语句,但这似乎不太有效和准确。
$counter = ImageRequest::whereDate('created_at', $date)->whereRaw('WHERE functional_id LIKE "1%"')->count();
我想得到一个显示名称和电话号码相似的结果,以及相似之处。
数据的预期结果应为
select t.*
from tax_payer t
where t.display_name ilike ('tob') or t.phone_number ilike('08162507399') and t.tax_payer_type = 'CORPORATE'
Name | PhoneNumber | taxIdenityNumber
tobi | 08162507399 | 12345
tob | 08162507633 | 12346
tobiss| 081625674 | 1234
jogn | +23408162507399 | 123467
doe | 0708732562 | 12345
如果可能想知道带来比赛的那一栏。
这将升级为用户,无论是电话号码,姓名还是两者都在引起匹配。
答案 0 :(得分:0)
您可以在自己的选择中尝试使用case
语句:
select t.* ,
case
when t.display_name ilike ('tob') then 'Display Name'
else 'Phone Number'
end as reason
from tax_payer t
where (t.display_name ilike ('tob') or t.phone_number ilike('08162507399')) and t.tax_payer_type = 'CORPORATE'
此示例将添加一个名为“ reason
”的列,其值为“显示名称”或“电话号码”。
如果您还想指出两者何时匹配:
select t.* ,
case
when t.display_name ilike ('tob') and t.phone_number ilike('08162507399') then 'Both'
when t.display_name ilike ('tob') then 'Display Name'
else 'Phone Number'
end as reason
from tax_payer t
where (t.display_name ilike ('tob') or t.phone_number ilike('08162507399')) and t.tax_payer_type = 'CORPORATE'
答案 1 :(得分:0)
您可以使用字符串串联列出相似性列:
select t.*,
((case when t.display_name ilike 'tob' then 'display_name;' end) ||
(case when t.phone_number ilike '08162507399' then 'phone_number;' end) ||
(case when t.tax_payer_type ilike 'CORPORATE' then 'tax_payer_type;' end)
) as column_matches
from tax_payer t
where t.display_name ilike 'tob' or
t.phone_number ilike '08162507399' and
t.tax_payer_type = 'CORPORATE' ;
或者,我可能更喜欢横向连接:
select t.*,
v.match_names
from tax_payer t inner join lateral
(select string_agg(name) as match_names, count(*) as num_matches
from (values (t.display_name, 'tob' 'display_name'),
(t.phone_number, '08162507399', 'phone_number'),
(t.tax_payer_type, 'CORPORATE', 'tax_payer_type')
) v(col, pat, name)
where v.col ilike v.pat
) v
order by num_matches desc;
答案 2 :(得分:0)
为什么上述答案中的每个人都使用我不知道的“案例”条件。这很简单,您需要在脚本中添加一些小的更改。
选择t。* 来自tax_payer t 其中(((t.display_name ilike('tob%'))或(t.phone_number ilike('%08162507399%')))和t.tax_payer_type ='CORPORATE';
它将完全按照您在“结果”表中显示的结果进行显示。