23

我在 Oracle 9.2.0.6 数据库中有一个表 users。其中两个字段是 varchar - last_name 和 first_name。

当向该表中插入行时,名字和姓氏字段应该全部大写,但是不知何故这两个字段中的某些值是混合大小写的。

我想运行一个查询,它将向我显示表中包含名字或姓氏的所有行,其中包含小写字符。

我在网上搜索并找到了 REGEXP_LIKE,但这一定是针对较新版本的 oracle - 它似乎对我不起作用。

我尝试的另一件事是将“abcde...z”翻译为“$$$$$...$”,然后在我的字段中搜索“$”,但必须有更好的方法吗?

提前致谢!

4

6 回答 6

76

这个怎么样:

select id, first, last from mytable
where first != upper(first) or last != upper(last);
于 2008-11-25T14:53:00.437 回答
2

我认为 BQ 的 SQL 和 Justin 的第二个 SQL 会起作用,因为在这种情况下:

first_name        last_name
----------        ---------
bob               johnson
Bob               Johnson
BOB               JOHNSON

我希望我的查询返回前 2 行。

我只是想确保这将是一个有效的查询——我的表中有 5 亿行。

当您说upper(first_name)!= first_name时,“first_name”是否总是与oracle正在查看的当前行有关?起初我害怕使用这种方法,因为我担心我最终会将这个表加入到自身中,但是你们俩编写 SQL 的方式似乎是相等检查仅在逐行的基础上运行,这会为我工作。

于 2008-11-25T15:12:44.063 回答
1

如果您正在寻找 Oracle 10g 或更高版本,您可以使用以下示例。考虑到您需要找出列中任何字母为小写的行。

Column1
.......
MISS
miss
MiSS

在上面的示例中,如果您需要查找值missMiSS,那么您可以使用以下查询

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
于 2016-08-28T13:00:17.177 回答
0
 SELECT * 
 FROM mytable 
 WHERE FIRST_NAME IN (SELECT FIRST_NAME 
                      FROM MY_TABLE
                      MINUS 
                      SELECT UPPER(FIRST_NAME) 
                      FROM MY_TABLE )
于 2012-07-31T13:29:14.147 回答
0

试试这个:

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]','c'); => Miss, miss lower text
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[A-Z]','c'); => Miss, MISS upper text
于 2017-11-28T07:39:51.270 回答
-1

对于数据库排序规则设置不区分大小写的 SQL 服务器,请使用以下命令:

SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))
于 2014-12-01T11:02:38.267 回答