查找第一个字母为大写的列值

时间:2018-06-02 14:47:41

标签: sql oracle

我有一张包含EID,ENAME,GENDER的表EMP_INFO。我的目标是仅显示第一个字母为大写或大写的ENAME值。

表格如下:

EID     ENAME     GENDER
001     Samuel    M
002     john      M
003     susan     F
004     CALEB     M

所需的输出如:

EID    ENAME
001    Samuel
004    CALEB

我试过了:

SELECT EID, ENAME
FROM EMP_INFO
WHERE ENAME like '[A-Z]%';

但这只是一个空白输出。没有错误,没有警告但没有输出。我也在使用oracle sql developer。

3 个答案:

答案 0 :(得分:2)

Oracle不支持<?php while ($data = mysqli_fetch_array($subject)) { echo "<form id='form'.'{$data['productID']}' method='post' action=' ' data-checktable='{$data['productID']}'>"; echo "<input type='checkbox' class='SelectAll'>All"; echo "<label><input type='checkbox' class='selector' value='{$data['product1']}'>" . $data['product1']."</label>"; echo "<label><input type='checkbox' class='selector' value='{$data['product2']}'>" . $data['product2']."</label>"; echo "</form>"; } ?> 模式中的通配符。您可以改为使用正则表达式:

LIKE

或者,您可以只比较第一个字符:

select EID , ENAME
from EMP_INFO
where regexp_like(ENAME, '^[A-Z]');

Here是此版本的一个有效示例。

默认情况下,Oracle区分大小写,因此这些应该适用于大多数Oracle系统。

答案 1 :(得分:1)

我们有一个名为initcap的众所周知的函数是相当可观的:

SELECT EID, ENAME
  FROM EMP_INFO
 WHERE substr(ENAME,1,1) = substr(initcap(ENAME),1,1);

或者使用:

SELECT EID, ENAME
  FROM EMP_INFO
 WHERE ENAME between chr(65) and chr(92);  

SQL Fiddle Demo

答案 2 :(得分:0)

您可以尝试以下内容(假设您没有done anything to make your SQL queries case-insensitive):

SELECT eid, ename
  FROM emp_info
 WHERE ename >= 'A'
   AND ename < CHR(ASCII('Z')+1);

这将确保ename的第一个字符介于AZ之间。 CHR(ASCII('Z')+1)的值是[,但这并不是非常重要 - 我认为在这种情况下使用函数比使用“魔术角色”更清楚。

编辑:这样做的原因是作为一个组的小写字符出现在许多字符集*中的大写字符之后,因此只要{{1}的值在enameA之间,根据典型的字符串比较,它将以大写字母开头。

*例如,here is the Unicode character tablehere is the ASCII character table。我怀疑这个解决方案可能不适用于EBCDIC字符集,但我没有一个服务器方便我可以证实这个怀疑。