首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查varchar2中的数字是否大于n

检查varchar2中的数字是否大于n
EN

Stack Overflow用户
提问于 2014-11-27 10:13:36
回答 2查看 634关注 0票数 0

我有一个Varchar2字段,它通常包含两个字母字符(例如ZHSZAI、.)。让我们称它为FOO

某些数据集将AA1 - A9保存到同一个字段中。除了那些行之外,我需要选择所有行。我使用函数substr将数字从A中分离出来,到目前为止,<>似乎没有正确地处理“数字字符串”。

如果不将其转换为数字,我如何才能做到这一点?有更简单的解决办法吗?

我还没有在互联网上找到任何东西,我已经达到了自己尝试的极限。

到目前为止,这是我的WHERE条款:

代码语言:javascript
复制
WHERE (substr(FOO, 0, 1) != 'A'
 or (substr(FOO, 0, 1) = 'A' AND substr(FOO, 1, 1) > '9'));

它不受限制地返回所有行。

我找到的唯一解决办法是:

代码语言:javascript
复制
WHERE (FOO NOT IN ('A', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9'));

但如果未来某个地方会出现A1 - A50,这并不是最佳选择。我将不得不在WHERE子句中添加51个字符串。而且,由于查询在源代码中,代码的可读性也会变得更糟。

该解决方案应该在ORACLE和上使用。提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-27 10:56:09

(substr(FOO, 0, 1) = (substr(FOO, 1, 1) -甲骨文以1开头(而不是0)。

因此,您应该使用substr(FOO, 2, 1)来获得第二个符号。

但是,它不能在具有SUBSTRING (而不是SUBSTR)的Server中工作。

如果您准备在不同的DB中使用不同的方法,也可以尝试正则表达式:

甲骨文

代码语言:javascript
复制
where not regexp_like(foo, '^A[1-9]{1,3}$')

字符串的开始

字符串的末尾

1-9从1到9的任何数字

{1,3}重复前面的表达式1、2或3次

匹配/不匹配'^A[1-9]{1,3}$' a123的FOOs示例--可能匹配/可能不匹配(取决于有关区分大小写的NLS设置)

A123 --匹配(第一个符号是'A',其他符号是3位数字)

A123b --不匹配(最后一个符号应该是数字)

A1234 --不匹配(结尾应该有1,2或3位数字)

A12 --匹配

A1 --匹配

SQL Server

LIKE conversion in SQL Server T-SQL

票数 2
EN

Stack Overflow用户

发布于 2014-11-27 16:49:34

如果您的要求是只包含“A”以外的所有字母值,请考虑使用一个类似的表达式,以便它可以与任何符合ANSI的DBMS一起工作:

代码语言:javascript
复制
WHERE FOO <> 'A' AND FOO NOT LIKE '%[^A-Z]%' 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27168028

复制
相关文章

相似问题

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