Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 检查字符是否在数字范围内变化_Postgresql_Groovy - Fatal编程技术网

Postgresql 检查字符是否在数字范围内变化

Postgresql 检查字符是否在数字范围内变化,postgresql,groovy,Postgresql,Groovy,我在我的数据库中有一个数据,我需要选择所有的数据,其中一个列号在1-100之间。 我有问题,因为我不能在1到100之间使用-=integer下面的PostgreSQL查询将工作 SELECT length_to_fault FROM diags WHERE regexp_replace(length_to_fault, '[\s+]', '', 'g')::numeric BETWEEN 1 AND 100; 由于您的列应该包含数值,但被定义为文本(或文本版本),因此有时它不包含数值,即您需要

我在我的数据库中有一个数据,我需要选择所有的数据,其中一个列号在1-100之间。 我有问题,因为我不能在1到100之间使用-

代码


错误-运算符不存在:字符变化>=integer

下面的PostgreSQL查询将工作

SELECT length_to_fault FROM diags WHERE regexp_replace(length_to_fault, '[\s+]', '', 'g')::numeric BETWEEN 1 AND 100;

由于您的列应该包含数值,但被定义为文本(或文本版本),因此有时它不包含数值,即您需要2次验证:该列实际包含数值数据,并且它符合您的值限制。因此,将以下谓词添加到查询中

and length_to_fault ~ '^\+?\d+(\.\d*)?$' 
and length_to_fault::numeric <@ ('[1.0,100.0]')::numrange;

根据您的RDBMS,您应该能够将值强制转换为整数,然后进行比较。我无法更改数据库中的任何内容。请在SQL中查找转换。这是一个比现在更复杂的select语句,它将出现在Groovy代码中。我将select part更改为-
select length\u to\u fault,从1到100之间的diags where cast(length\u to\u fault为整数)。现在错误是-整数类型的输入语法无效:“32.12”。这里有什么建议吗?恕我直言,请阅读数据库的SQL语法。SQL非常强大,但你需要学习基础知识。如果我有完整的数字,它可以工作,但因为我有32.12,整数不能使用。。。若我将数据类型更改为float,它将显示关于双精度的错误:“N/A”。在数据库中,一些插入是不适用的,也许这就是为什么它会显示它?你有什么建议吗?我都修好了。谢谢,你的选择也很有效。我刚刚把-
length\u添加到了\u fault!='不适用
因此它忽略N/A,并且我的float可以处理数字使用“regexp\u replace”将“N/A”替换为所需的输出
and length_to_fault ~ '^\+?\d+(\.\d*)?$' 
and length_to_fault::numeric <@ ('[1.0,100.0]')::numrange;
alter table diags 
      add constraint length_to_fault_check
          check (   lower(length_to_fault) = 'n/a' 
                 or (    length_to_fault ~ '^\+?\d+(\.\d*)?$' 
                     and length_to_fault::numeric <@ ('[1.0,100.0]')::numrange
                    )
                 );
lower(lenth_to_fault) != 'n/a'