我有一张包含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。
答案 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);
答案 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
的第一个字符介于A
和Z
之间。 CHR(ASCII('Z')+1)
的值是[
,但这并不是非常重要 - 我认为在这种情况下使用函数比使用“魔术角色”更清楚。
编辑:这样做的原因是作为一个组的小写字符出现在许多字符集*中的大写字符之后,因此只要{{1}的值在ename
和A
之间,根据典型的字符串比较,它将以大写字母开头。
*例如,here is the Unicode character table和here is the ASCII character table。我怀疑这个解决方案可能不适用于EBCDIC字符集,但我没有一个服务器方便我可以证实这个怀疑。