Câu trả lời:
Nó gần giống nhau, bạn chỉ cần thay đổi để sử dụng hàm CONCAT () thay vì toán tử +:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Điều này sẽ chuyển hello
thành Hello
, wOrLd
thành WOrLd
, BLABLA
đến BLABLA
, v.v. Nếu bạn muốn viết hoa chữ cái đầu tiên và viết thường chữ cái kia, bạn chỉ cần sử dụng hàm LCASE:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
Lưu ý rằng UPPER và UCASE làm điều tương tự.
Câu trả lời xuất sắc của Vincents cho Chữ cái đầu tiên viết hoa hoạt động tuyệt vời cho chữ cái đầu tiên chỉ viết hoa của toàn bộ chuỗi cột ..
NHƯNG điều gì xảy ra nếu bạn muốn viết hoa Chữ cái đầu tiên của MỌI từ trong các chuỗi của cột bảng?
ví dụ: "Abbeville High School"
Tôi đã không tìm thấy câu trả lời cho điều này trong Stackoverflow. Tôi đã phải tập hợp một số câu trả lời mà tôi tìm thấy trên Google để đưa ra giải pháp vững chắc cho ví dụ trên. Nó không phải là một hàm gốc mà là một hàm do người dùng tạo ra mà MySQL phiên bản 5+ cho phép.
Nếu bạn có trạng thái người dùng Super / Admin trên MySQL hoặc có cài đặt mysql cục bộ trên máy tính của riêng mình, bạn có thể tạo FUNCTION (giống như một quy trình được lưu trữ) nằm trong cơ sở dữ liệu của bạn và có thể được sử dụng trong tất cả các truy vấn SQL trong tương lai trên bất kỳ phần nào của db.
Hàm tôi đã tạo cho phép tôi sử dụng hàm mới này mà tôi gọi là "UC_Words" giống như các hàm gốc tích hợp sẵn của MySQL để tôi có thể cập nhật một cột hoàn chỉnh như sau:
UPDATE Table_name
SET column_name = UC_Words(column_name)
Để chèn mã hàm, tôi đã thay đổi dấu phân cách chuẩn MySQL (;) trong khi tạo hàm, rồi đặt lại nó trở lại bình thường sau tập lệnh tạo hàm. Cá nhân tôi cũng muốn đầu ra ở dạng UTF8 CHARSET.
Tạo hàm =
DELIMITER ||
CREATE FUNCTION `UC_Words`( str VARCHAR(255) ) RETURNS VARCHAR(255) CHARSET utf8 DETERMINISTIC
BEGIN
DECLARE c CHAR(1);
DECLARE s VARCHAR(255);
DECLARE i INT DEFAULT 1;
DECLARE bool INT DEFAULT 1;
DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';
SET s = LCASE( str );
WHILE i < LENGTH( str ) DO
BEGIN
SET c = SUBSTRING( s, i, 1 );
IF LOCATE( c, punct ) > 0 THEN
SET bool = 1;
ELSEIF bool=1 THEN
BEGIN
IF c >= 'a' AND c <= 'z' THEN
BEGIN
SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1));
SET bool = 0;
END;
ELSEIF c >= '0' AND c <= '9' THEN
SET bool = 0;
END IF;
END;
END IF;
SET i = i+1;
END;
END WHILE;
RETURN s;
END ||
DELIMITER ;
Điều này hoạt động để xử lý xuất ra các chữ cái đầu tiên viết hoa trên nhiều từ trong một chuỗi.
Giả sử tên người dùng đăng nhập MySQL của bạn có đủ đặc quyền - nếu không, và bạn không thể thiết lập DB tạm thời trên máy cá nhân để chuyển đổi các bảng của mình, thì hãy hỏi nhà cung cấp dịch vụ lưu trữ chia sẻ của bạn xem họ có đặt chức năng này cho bạn không.
CHARSET utf8_general_ci
nên được đổi thành CHARSET utf8
(ít nhất là vào ngày 5.7)
Illegal mix of collations for operation 'concat'
vì vậy tôi nghĩ chỉ cần sửa bộ ký tự hoặc xóa nó và đặt nó về mặc định.
Bạn có thể sử dụng kết hợp UCASE()
, MID()
và CONCAT()
:
SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
SELECT CONCAT(UCASE(MID('TEST',1,1)),MID('TEST',2));
mysql> SELECT schedule_type AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| ENDDATE |
+----------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT(UCASE(MID(schedule_type,1,1)),LCASE(MID(schedule_type,2))) AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| Enddate |
+----------+
1 row in set (0.00 sec)
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html# Chức năng_mid
http://forge.mysql.com/tools/tool.php?id=201
Nếu có nhiều hơn 1 từ trong cột, thì điều này sẽ không hoạt động như hình dưới đây. UDF được đề cập ở trên có thể giúp ích trong trường hợp đó.
mysql> select * from names;
+--------------+
| name |
+--------------+
| john abraham |
+--------------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
+--------------+
| name |
+--------------+
| John abraham |
+--------------+
1 row in set (0.00 sec)
Hoặc có thể cái này sẽ giúp ...
Điều này đang hoạt động tốt.
UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) +
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Nếu ai đó cố gắng viết hoa mỗi từ cách nhau bằng dấu cách ...
CREATE FUNCTION response(name VARCHAR(40)) RETURNS VARCHAR(200) DETERMINISTIC
BEGIN
set @m='';
set @c=0;
set @l=1;
while @c <= char_length(name)-char_length(replace(name,' ','')) do
set @c = @c+1;
set @p = SUBSTRING_INDEX(name,' ',@c);
set @k = substring(name,@l,char_length(@p)-@l+1);
set @l = char_length(@k)+2;
set @m = concat(@m,ucase(left(@k,1)),lcase(substring(@k,2)),' ');
end while;
return trim(@m);
END;
CREATE PROCEDURE updateNames()
BEGIN
SELECT response(name) AS name FROM names;
END;
Kết quả
+--------------+
| name |
+--------------+
| Abdul Karim |
+--------------+
Điều này sẽ hoạt động tốt:
UPDATE tb_Company SET CompanyIndustry =
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))
UPDATE users
SET first_name = CONCAT(UCASE(LEFT(first_name, 1)),
LCASE(SUBSTRING(first_name, 2)))
,last_name = CONCAT(UCASE(LEFT(last_name, 1)),
LCASE(SUBSTRING(last_name, 2)));
select CONCAT(UCASE(LEFT('CHRIS', 1)),SUBSTRING(lower('CHRIS'),2));
Câu lệnh trên có thể được sử dụng cho chữ viết hoa đầu tiên và phần còn lại là chữ thường.
Uso algo simples assim;)
DELIMITER $$
DROP FUNCTION IF EXISTS `uc_frist` $$
CREATE FUNCTION `uc_frist` (str VARCHAR(200)) RETURNS varchar(200)
BEGIN
set str:= lcase(str);
set str:= CONCAT(UCASE(LEFT(str, 1)),SUBSTRING(str, 2));
set str:= REPLACE(str, ' a', ' A');
set str:= REPLACE(str, ' b', ' B');
set str:= REPLACE(str, ' c', ' C');
set str:= REPLACE(str, ' d', ' D');
set str:= REPLACE(str, ' e', ' E');
set str:= REPLACE(str, ' f', ' F');
set str:= REPLACE(str, ' g', ' G');
set str:= REPLACE(str, ' h', ' H');
set str:= REPLACE(str, ' i', ' I');
set str:= REPLACE(str, ' j', ' J');
set str:= REPLACE(str, ' k', ' K');
set str:= REPLACE(str, ' l', ' L');
set str:= REPLACE(str, ' m', ' M');
set str:= REPLACE(str, ' n', ' N');
set str:= REPLACE(str, ' o', ' O');
set str:= REPLACE(str, ' p', ' P');
set str:= REPLACE(str, ' q', ' Q');
set str:= REPLACE(str, ' r', ' R');
set str:= REPLACE(str, ' s', ' S');
set str:= REPLACE(str, ' t', ' T');
set str:= REPLACE(str, ' u', ' U');
set str:= REPLACE(str, ' v', ' V');
set str:= REPLACE(str, ' w', ' W');
set str:= REPLACE(str, ' x', ' X');
set str:= REPLACE(str, ' y', ' Y');
set str:= REPLACE(str, ' z', ' Z');
return str;
END $$
DELIMITER ;