我有一个表,用户,在Oracle数据库9.2.0.6。字段中的两个是VARCHAR - 姓氏和first_name的

当行被插入到该表中,第一名字和姓氏字段应该是在全部大写,但在这两个字段以某种方式的某些值被混合的情况。

我想运行一个查询会告诉我的所有行的在与小写字符第一个或最后一个名称在其表。

我搜索网,发现REGEXP_LIKE,但必须是针对Oracle的新版本 - 它似乎并没有为我工作

另一件事我想是翻译“ABCDE ...... Z”到“$$$$$ ... $”,然后搜索在这个领域“$”,但必须有一个更好的办法?

提前感谢!

有帮助吗?

解决方案

这样如何:

select id, first, last from mytable
where first != upper(first) or last != upper(last);

其他提示

我觉得BQ的SQL和贾斯汀的第二SQL会的工作,因为在这种情况下:

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

我想我的查询返回第2行。

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

当你说上(FIRST_NAME)!= FIRST_NAME,是“FIRST_NAME”始终属于当前行,甲骨文是在看什么?我害怕在第一,因为我怕我会最终加盟此表本身使用这种方法,但他们的方式,你都写了,似乎人人平等检查只在一行接一行的基础工作,在SQL这会为我工作。

如果你正在寻找Oracle 10g或更高则可以使用下面的例子。想想看,你需要找出行,其中的任何一列的字母是小写。

Column1
.......
MISS
miss
MiSS

在上面的例子中,如果需要找到值missMiSS,则可以使用下面的查询

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
 SELECT * 
 FROM mytable 
 WHERE FIRST_NAME IN (SELECT FIRST_NAME 
                      FROM MY_TABLE
                      MINUS 
                      SELECT UPPER(FIRST_NAME) 
                      FROM MY_TABLE )

尝试这种情况:

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

对于其中DB排序设置是不区分大小写使用如下的SQL服务器:

SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top