我在Oracle 9.2.0.6数据库中有一个表users。其中两个字段是varchar - last_name和first_name。
当行插入此表时,名字和姓氏字段应该全部为大写,但不知何故,这两个字段中的某些值是大小写混合。
我想运行一个查询,它会向我显示表中包含小写字符的名字或姓氏的所有行。
我在网上搜索并发现了REGEXP_LIKE,但这必须适用于较新版本的oracle - 它似乎对我没用。
我尝试的另一件事是将“abcde ... z”翻译为“$$$$$ ... $”,然后在我的字段中搜索“$”,但必须有更好的方法吗?
提前致谢!
答案 0 :(得分:59)
这个怎么样:
select id, first, last from mytable
where first != upper(first) or last != upper(last);
答案 1 :(得分:1)
我认为BQ的SQL和Justin的第二个SQL会起作用,因为在这种情况下:
first_name last_name
---------- ---------
bob johnson
Bob Johnson
BOB JOHNSON
我希望我的查询返回前两行。
我只想确保这将是一个有效的查询 - 我的表中有5亿行。
当你说upper(first_name)!= first_name时,“first_name”是否始终与oracle正在查看的当前行有关?我一开始害怕使用这种方法,因为我担心我最终会把这个表连接到自己,但是他们都写了SQL,看起来等式检查只是逐行操作,会对我有用。
答案 2 :(得分:0)
如果您正在寻找Oracle 10g或更高版本,您可以使用以下示例。请考虑您需要找出列中任何字母为小写的行。
Column1
.......
MISS
miss
MiSS
在上面的示例中,如果您需要找到值miss
和MiSS
,那么您可以使用以下查询
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
答案 3 :(得分:-1)
SELECT *
FROM mytable
WHERE FIRST_NAME IN (SELECT FIRST_NAME
FROM MY_TABLE
MINUS
SELECT UPPER(FIRST_NAME)
FROM MY_TABLE )
答案 4 :(得分:-1)
试试这个:
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
答案 5 :(得分:-2)
对于SQL服务器,其中DB排序规则设置为不区分大小写,请使用以下命令:
SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))