Кто-нибудь знает эквивалент этого TSQL на языке MySQL?
Я пытаюсь использовать первую букву каждой записи с заглавной буквы.
UPDATE tb_Company SET CompanyIndustry = UPPER(LEFT(CompanyIndustry, 1))
+ SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Кто-нибудь знает эквивалент этого TSQL на языке MySQL?
Я пытаюсь использовать первую букву каждой записи с заглавной буквы.
UPDATE tb_Company SET CompanyIndustry = UPPER(LEFT(CompanyIndustry, 1))
+ SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Ответы:
Это почти то же самое, вам просто нужно изменить использование функции CONCAT () вместо оператора +:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Это будет превращаться helloв Hello, wOrLdв WOrLd, BLABLAв BLABLAи т. Д. Если вы хотите использовать первую букву в верхнем регистре, а другую в нижнем регистре, вам просто нужно использовать функцию LCASE:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
Обратите внимание, что UPPER и UCASE делают то же самое.
Винсент отличный ответ на заглавную первую букву отлично работает для заглавных букв только первой буквы всей строки столбца ..
НО что, если вы хотите, чтобы первая буква КАЖДОГО слова в строках столбца таблицы была прописной?
например: "Средняя школа Абвиль"
Я не нашел ответа на этот вопрос в Stackoverflow. Мне пришлось сколотить несколько ответов, которые я нашел в Google, чтобы предоставить надежное решение для приведенного выше примера. Это не собственная функция, а функция, созданная пользователем, которую позволяет MySQL версии 5+.
Если у вас есть статус пользователя Super / Admin в MySQL или у вас есть локальная установка mysql на вашем собственном компьютере, вы можете создать ФУНКЦИЮ (например, хранимую процедуру), которая находится в вашей базе данных и может использоваться во всех будущих SQL-запросах в любой части дб.
Созданная мною функция позволяет мне использовать эту новую функцию, которую я назвал «UC_Words», точно так же, как встроенные собственные функции MySQL, так что я могу обновить весь столбец следующим образом:
UPDATE Table_name
SET column_name = UC_Words(column_name)
Чтобы вставить код функции, я изменил стандартный разделитель MySQL (;) при создании функции, а затем вернул его в нормальное состояние после сценария создания функции. Я также лично хотел, чтобы вывод тоже был в UTF8 CHARSET.
Создание функции =
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 ;
Это работает с выводом первых букв верхнего регистра для нескольких слов в строке.
Предполагая, что ваше имя пользователя для входа в MySQL имеет достаточные привилегии - если нет, и вы не можете настроить временную БД на своем персональном компьютере для преобразования ваших таблиц, тогда спросите своего поставщика общего хостинга, установят ли они эту функцию для вас.
CHARSET utf8_general_ciдолжен быть изменен на CHARSET utf8(по крайней мере, на 5.7)
Illegal mix of collations for operation 'concat'поэтому я думаю, просто исправьте кодировку или удалите ее и сделайте ее по умолчанию.
Вы можете использовать комбинацию UCASE() , MID()и 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#function_mid
http://forge.mysql.com/tools/tool.php?id=201
Если в столбце больше 1 слова, это не сработает, как показано ниже. Упомянутый выше UDF может помочь в этом случае.
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)
А может, это поможет ...
Это прекрасно работает.
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))
Если кто-нибудь попытается записать каждое слово с большой буквы через пробел ...
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;
Результат
+--------------+
| name |
+--------------+
| Abdul Karim |
+--------------+
Это должно работать нормально:
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)));
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 ;