mysql - 如何在 Oracle 中检查字符串中的特定位置

标签 mysql oracle oracle11g

如何检查字符串中的第 9 个字符是字母还是数字。

例如,在“25006070TR”中,我想返回 Yes 或类似于它是一封信的东西。另一方面,在“250060708R”中,我想要一个“否”或表示数字的东西。

最佳答案

您可以使用 case 语句以及 substr 和 regexp_like 的组合,例如:

with sample_data as (select '25006070TR' str from dual union all
                     select '250060708R' str from dual union all
                     select '25006070#R' str from dual union all
                     select '25006070 R' str from dual union all
                     select '12345' str from dual)
select str,
       case when regexp_like(substr(str, 9, 1), '\d') then 'Digit'
            when regexp_like(substr(str, 9, 1), '[[:alpha:]]') then 'Letter'
            when substr(str, 9, 1) is null then 'Empty'
            else 'Special character'
       end ninth_char_type
from   sample_data;


STR        NINTH_CHAR_TYPE  
---------- -----------------
25006070TR Letter           
250060708R Digit            
25006070#R Special character
25006070 R Special character
12345      Empty            

显然,如果您直接在 PL/SQL 中执行此操作,则可以直接将 case 语句嵌入到 PL/SQL 中;您不需要切换到 SQL。

如果您要从表中获取字符串,那么您应该在 SQL 语句中保留 case 表达式。

关于mysql - 如何在 Oracle 中检查字符串中的特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949080/

相关文章:

SQL CASE语句检查字段中的多个拼写并在找到时返回相同的值?

sql - 如何根据 Oracle 11g+ 中聚合元素的数量改变 LISTAGG() 的结果?

php - mysql 中的 Rails 多数组格式

php - 正确使用 PHP MYSQL 数组

mysql - 执行捆绑安装时 MySql 出错

php - 使用 PHP 将 SQL 表导出为 CSV 格式

java - 使用 PL/SQL 生成 SPSS 文件

oracle - 将字符串拆分为变量

java - Java Servlet 中的数据库连接池

mysql - 如何将oracle TRUNC(SYSDATE-100 ,'Q')添加到MySQL