剥离字符串的最后一位并将其反转......这些从 Postgres 到 Oracle 到其他任何东西都有所不同,但很容易完成。
这个查询片段大约是一半:
select translate(reverse(left('6011406981867628',-1)), '13579', '26159');
-- 6011406981867628 is a fake credit card number for test purposes.
剩下的唯一一件事就是对所有数字求和,然后对它们取模 10。但是,当我尝试这样做时:
select sum(regexp_split_to_table(translate(reverse(left('6011406981867628',-1)), '13579', '26159'), E'\\s*')::integer);
我收到以下错误:
ERROR: set-valued function called in context that cannot accept a set
请注意,如果我删除总和,如下所示:
select regexp_split_to_table(translate(reverse(left('6011406981867628',-1)), '13579', '26159'), E'\\s*')::integer;
我会得到这个:
regexp_split_to_table
-----------------------
2
6
5
6
8
2
8
9
6
0
4
2
2
0
6
(15 rows)
如果我能算出总和,那check (n%10 = right('6011406981867628',1))
我就完了。
是否可以对这些进行 sum() ?