【问题标题】:Condition in where clause to return values that starts with letters?where 子句中的条件以返回以字母开头的值?
【发布时间】:2014-05-27 17:35:16
【问题描述】:

我需要在 where 子句中设置一个条件来返回包含字母的值。 这是我的数据示例:一个是纯数字 123456789,一个是混合 AB1234567

我只想返回混合的字母/数字值。

谢谢

编辑:以下答案中的两种方法都可以正常工作! 你们太棒了!

我发现了一个更简单的方法是使用where col>'A' 根据已回答的脚本测试结果,它们返回的结果相同。

【问题讨论】:

  • @squiguy 你提到的问题是关于 TSQL 而不是 Oracle SQL。
  • @JosephB 不知道是不是一模一样,但思路是一样的。
  • @squiguy 同意。但是,另一个问题中接受的答案不适用于 Oracle。所以,它不是重复的。

标签: sql oracle


【解决方案1】:
where LENGTH(TRIM(TRANSLATE(YourField, ' +-.0123456789', ' '))) is not null

来源:http://www.techonthenet.com/oracle/questions/isnumeric.php

使用包含的数据进行测试 MX01386 7493559

is not null 返回的 MX 记录是 null 返回的数值记录。

这实质上是用空格替换每个值,然后如果结果值为空,则删除该空格,那么它必须是数字。如果不为null,则包含此列表之外的字符'+-.0123456789'

【讨论】:

  • 谢谢它的工作。实际上,您的两种方法都有效!但我会采用你的方法,因为我需要将脚本实现到可能不采用 REGEXP_LIKE 的旧旧系统中。
【解决方案2】:

SELECT * FROM table WHERE REGEXP_LIKE(column, '[A-Za-z0-9]') and REGEXP_LIKE(column,'[^0-9]')

查询选择字母数字记录并过滤数字记录,这是使用否定^完成的

Demo here

【讨论】:

  • 如果我在查询后面添加另一个条件'and column='123456789',它仍然会返回数值。我需要查询完全省略纯数字记录。
  • 包含MX013867493559 的列返回了两条记录。
  • 在第二组 [] 周围添加 ',这样也可以!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多