我有一个包含几千个条目的数据库表。已输入部分条目(约20%),并在“名称”列中输入完全大写的字符串。
示例:
id | name
---------
1 | THOMAS GOLDENBERG
2 | Henry Samuel
3 | GIL DOFT
4 | HARRY CRAFT
5 | Susan Etwall
6 | Carl Cooper
SQL查询如何在名称列中选择具有完全大写字符串的所有条目? (即在例子中:那些ID为1,3,4的人)
答案 0 :(得分:5)
在MySQL中它将是:
SELECT id FROM table WHERE name = UPPER(name);
我认为这在SQL Server,DB2和Postgres中的工作方式相同。
答案 1 :(得分:4)
什么是数据库系统?
理论上你可以做一个简单的SELECT ... WHERE name = UPPER(name);
,但这并不总是有效。根据数据的整理,您可能会发现所有记录都满足此条件,因为使用的比较可能不区分大小写。
您需要确保使用区分大小写的排序规则进行比较,并且正确的答案取决于您使用的数据库平台。例如,使用SQL Server语法:
SELECT ... WHERE Name COLLATE Latin1_General_100_CS_AS = UPPER(Name);
这也是works in MySQL,条件是您在MySQL上使用有效的校对名称。
答案 2 :(得分:2)
select * from your_table where name = upper(name)
答案 3 :(得分:1)
这是一个将大写转换为标题大小写的MySql函数:
示例:
update your_table set name = tcase(name) where name = upper(name);
功能:
CREATE FUNCTION `tcase`(str text) RETURNS text CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE result TEXT default '';
DECLARE space INT default 0;
DECLARE last_space INT default 0;
IF (str IS NULL) THEN
RETURN NULL;
END IF;
IF (char_length(str) = 0) THEN
RETURN '';
END IF;
SET result = upper(left(str,1));
SET space = locate(' ', str);
WHILE space > 0 DO
SET result = CONCAT(result, SUBSTRING(str, last_space+2, space-last_space-1));
SET result = CONCAT(result, UPPER(SUBSTRING(str, space+1, 1)));
SET last_space = space;
SET space = locate(' ', str, space+2);
END WHILE;
SET result = CONCAT(result, SUBSTRING(str, last_space+2));
RETURN result;
END $$
DELIMITER ;