我需要检查4列(varchar)是否至少有1行具有科学内涵值(E+)我对单个列执行此操作:
declare
_ean int;
begin
t_query = '
select count(*) from mytable where trim_to_null(myfield) is not null and (trim_to_null(myfield) ilike '%E+%');';
execute t_query into _ean;
IF _ean != 0 THEN
RAISE NOTICE 'EAN has a scientific connotation, please review the file';
return 'Error The file contains % EAN with scientific connotation';
END IF;
return null;它对这一列没问题,但现在我需要再检查4列,我需要告诉哪一列找到了科学内涵,我可以用倍数"IF“来检查每一列,但我打赌有更好的方法可以在一句话中做到这一点,并返回具有科学内涵的列名。
发布于 2020-06-22 22:24:46
正如注释中所述,您不需要动态SQL来实现这一点。
此外,将数字存储为字符串是非常糟糕的做法-您的查询会变得更加复杂,而且有人可能也会存储非数字。
综上所述,我认为您的查询忽略了一个事实,即科学记数法也可以是1e-7或1e4。
所以我认为查询应该包含
WHERE trim_to_null(myfield) ILIKE '%E%'或者,如果您想要检查数字的正确性,就像这样
WHERE trim_to_null(myfield) ~ '^[+-]?[0-9]+(\.[0-9]*)?[eE][+-]?[0-9]+$'但是对于你最初的问题:
你可以跑
SELECT id, col1_is_ean, col2_is_ean, col3_is_ean
FROM (SELECT id,
col1 ILIKE '%E%' AS col1_is_ean,
col2 ILIKE '%E%' AS col2_is_ean,
col3 ILIKE '%E%' AS col3_is_ean
FROM mytable) AS q
WHERE col1_is_ean OR col2_is_ean OR col3_is_ean;https://stackoverflow.com/questions/62513862
复制相似问题