Return 以字母开头的值

Return value starting with alphabets

如何找出以字母开头的值。

例如

我有数据

prodCode

12FDBC
34IO
ZklM
hOP
12-b.9     

从上面我希望返回 ZklMhOP。 我该怎么做?

我对oracle不熟悉,但是类似:WHERE REGEXP_LIKE(prodCode, '[aZ].*')

更新: 它很难看,它适用于 MS SQL 服务器,但它可能有帮助(我不知道 Oracle 语法,我唯一知道的是当你 select from dummy [=21 时你需要添加 FROM dual =]):

SELECT
    *
FROM
    #test t
WHERE substr(a, 1, 1) BETWEEN 'a' AND 'Z'

CREATE TABLE #test
(
    a VARCHAR(100)
);

INSERT INTO #test VALUES ('12FDBC');
INSERT INTO #test VALUES ('34IO');
INSERT INTO #test VALUES ('ZklM');
INSERT INTO #test VALUES ('hOP');
INSERT INTO #test VALUES ('12-b.9');

    SELECT * FROM #test t
    WHERE NOT EXISTS (
    SELECT * FROM (
SELECT '1' a 
UNION ALL SELECT '2' 
UNION ALL SELECT '3' 
UNION ALL SELECT '4' 
UNION ALL SELECT '5' 
UNION ALL SELECT '6' 
UNION ALL SELECT '7' 
UNION ALL SELECT '8' 
UNION ALL SELECT '9' 
UNION ALL SELECT '0' ) a
    WHERE t.a LIKE a.a + '%'
    )

显而易见的答案是尽可能升级。我什至找不到 8i 扩展支持结束的日期;对于 9i,它是 2007-07-31,差不多 8 年前。

如果做不到这一点,您将不得不枚举所有您想要接受的字符;要么像这样,太长了:

select *
  from ...
 where lower(substr(prod_code, 1, 1)) in ('a', 'b', ..., 'z')

或者这个,不太明显但更小:

select *
  from ...
 where trim(translate(lower(substr(prod_code, 1, 1))
                      , 'abcdefghijklmnopqrstuvwxyz', ' ')) is null

或者,您可以创建一个 table,其中包含您想要接受和加入的角色:

select *
  from ... a
     , alphabet b
 where substr(a.prod_code, 1, 1) = b.character

最后,您可以使用 ASCII() 函数,我很确定它存在于 8i

select *
  from ...
 where ascii(lower(substr(a.prod_code, 1, 1))) between 97 and 122

为了让生活更轻松,我在大多数情况下明确小写;如果你想要这个索引,你无论如何都会有一个功能索引,额外的 LOWER() 不会有太大的区别。