将现有表格中每个单词的第一个字母大写

36

我有一个已存在的表'people_table',其中有一个字段full_name

许多记录中,'full_name'字段中的大小写是错误的。例如:'fred Jones''fred jones''Fred jones'

我可以使用以下代码找到这些错误的条目:

SELECT * FROM people_table WHERE full_name REGEXP BINARY '^[a-z]';

我该如何将每个单词的首字母大写?例如:'fred jones' 变成 'Fred Jones'

15个回答

0

首先创建一个函数

DROP FUNCTION IF EXISTS UC_FIRST;
CREATE FUNCTION UC_FIRST(oldWord VARCHAR(255)) RETURNS VARCHAR(255) 
RETURN CONCAT(UCASE(SUBSTRING(oldWord, 1, 1)),SUBSTRING(oldWord, 2));

然后使用这个查询

UPDATE mytable SET thefield = UC_FIRST(thefield);

这只会将第一个单词的首字母大写,而不是所有单词的首字母。 - OMA

0
如果你不想编写自己的存储函数,可以使用JSON_TABLE将文本“拆分”成多行(每个单词一行),然后对每个单词进行处理并将它们拼接在一起。
-- temp table of data to demonstrate with
CREATE TEMPORARY TABLE tmp_names AS
VALUES ROW(1, "ted theodore LOGAN")
     , ROW(2, "BiLL S preston esquire")
     , ROW(3, "rufus")
;

-- in the update we can't open the temp table twice so duplicate
-- in real you'd just use your original table both times
CREATE TEMPORARY TABLE tmp_names2 AS SELECT * FROM tmp_names; 

-- for understanding: see what we've turned the table into
SELECT *
FROM tmp_names AS t
INNER JOIN JSON_TABLE(
    CONCAT('["', REPLACE(t.column_1, ' ', '","'), '"]')
    , "$[*]" COLUMNS (name VARCHAR(100) PATH "$")
    ) AS s
;

-- update the data by running all of this
-- or just run the subquery part to see how the GROUP_CONCAT turns out
UPDATE tmp_names AS t
INNER JOIN (
-- subquery start
  SELECT t.column_0, t.column_1
       , GROUP_CONCAT(
           CONCAT(
             UPPER(SUBSTR(s.name, 1, 1))
             , LOWER(SUBSTR(s.name, 2))
           )
           SEPARATOR ' '
       ) AS title_cased
  FROM tmp_names2 AS t
  INNER JOIN JSON_TABLE(
      CONCAT('["', REPLACE(t.column_1, ' ', '","'), '"]')
      , "$[*]" COLUMNS (name VARCHAR(100) PATH "$")
      ) AS s
  GROUP BY 1, 2
-- subquery end
) AS j
  ON j.column_0 = t.column_0
SET t.column_1 = j.title_cased
;

-- see the beautiful result
SELECT * FROM tmp_names;

-2

Excel中的Proper函数(或Google表格)可以完美地实现您想要的功能。

因此,将MySQL表导出为CSV并导入Excel(或Google表格)。然后使用= Proper(*text_to_capitalize*)来大写每个单词的第一个字母。

然后只需将该Excel表格作为CSV导出到您的数据库即可。


-2
在phpmyadmin中运行以下命令:UPDATE table_name SET Column_Name = LOWER(Column_Name) 然后在显示数据库表数据的HTML页面中使用CSS:text-transform: capitalize;

-2
如果您正在使用PHP,那么...
try{
  $con = new PDO("mysql:host=localhost;dbname=dbasename", "root", "");
}
catch(PDOException $e){
  echo "error" . $e-getMessage();
}

$select = $con->prepare("SELECT * FROM table");
$select->setFetchMode(PDO::FETCH_ASSOC);
$select->execute();

while($data=$select->fetch()) {

  $id = $data['id'];
  $column = $data['column'];
  $column = ucwords(strtolower($column)); // Capitalize each word

  $update = $con->prepare("UPDATE table SET column=:column WHERE id='$id'");
  $update->bindParam(':column', $column);
  $update->execute();
}

这个问题特别涉及MySQL方法。在MySQL中进行操作的好处是,它可以独立于编程语言完成。它还可以用于数据视图和派生列等。PHP确实可以处理这个问题,但在这里使用PHP并不是一个解决方案。 - Giacomo1968

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接