选择在特定列中具有完全大写字符串的所有表条目?

时间:2009-11-28 17:39:07

标签: sql

我有一个包含几千个条目的数据库表。已输入部分条目(约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的人)

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 ;