首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查列集是否具有科学价值

检查列集是否具有科学价值
EN

Stack Overflow用户
提问于 2020-06-22 19:56:06
回答 1查看 33关注 0票数 0

我需要检查4列(varchar)是否至少有1行具有科学内涵值(E+)我对单个列执行此操作:

代码语言:javascript
复制
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“来检查每一列,但我打赌有更好的方法可以在一句话中做到这一点,并返回具有科学内涵的列名。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-22 22:24:46

正如注释中所述,您不需要动态SQL来实现这一点。

此外,将数字存储为字符串是非常糟糕的做法-您的查询会变得更加复杂,而且有人可能也会存储非数字。

综上所述,我认为您的查询忽略了一个事实,即科学记数法也可以是1e-71e4

所以我认为查询应该包含

代码语言:javascript
复制
WHERE trim_to_null(myfield) ILIKE '%E%'

或者,如果您想要检查数字的正确性,就像这样

代码语言:javascript
复制
WHERE trim_to_null(myfield) ~ '^[+-]?[0-9]+(\.[0-9]*)?[eE][+-]?[0-9]+$'

但是对于你最初的问题:

你可以跑

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62513862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档