2010-11-24 3 views
78

Кто-нибудь знает эквивалент этого TSQL в языке MySQL?Заглавие первой буквы. MySQL

Я пытаюсь использовать первую букву каждой записи.

UPDATE tb_Company SET CompanyIndustry = UPPER(LEFT(CompanyIndustry, 1)) 
+ SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry)) 

ответ

194

Это почти то же самое, вы просто должны изменить, чтобы использовать CONCAT() функцию вместо + оператор:

UPDATE tb_Company 
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
          SUBSTRING(CompanyIndustry, 2)); 

Это превратило бы hello в, wOrLd к WOrLd, BLABLA к BLABLA и т.д. Если вы хотите прописной первую букву и строчные другой, вы просто должны использовать функцию LCASE:

UPDATE tb_Company 
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
          LCASE(SUBSTRING(CompanyIndustry, 2))); 

Обратите внимание, что верхний и UCASE сделать тоже самое.

16

Вы можете использовать комбинацию UCASE(), MID() и CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names; 
1
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) + 
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry)) 
+1

Это не будет работать, + это не CONCAT оператор с MySQL. – 2010-11-24 03:47:32

+1

ответ, который написал Энрико Паллаццо, должен работать нормально – 2010-11-24 03:49:56

+0

Я просто пытался выделить функцию UCASE в MySQL: P :) – 2010-11-24 03:51:50

0

Это должно работать хорошо:

UPDATE tb_Company SET CompanyIndustry = 
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2)) 
5

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) 

Или, возможно, это одна поможет ...

http://www.mysqludf.org/lib_mysqludf_str/index.php#str_ucwords

7
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

2

Это работает хорошо.

имя ОБНОВЛЕНИЕ состояние SET = CONCAT (UCASE (ЛЕВЫЙ (имя, 1)), LCASE (SUBSTRING (имя, 2)));

30

Vincents отличного ответ для Прописных Первого Письма работает отлично подходит для первой буквы только капитализации всей строки столбца ..

НО что, если вы хотите, чтобы в верхнем регистр первой буквы каждого слова в строках столбца таблицы?

например: "Аббевилль High School"

Я не нашел ответ на это в Stackoverflow. Мне пришлось собрать несколько ответов, которые я нашел в Google, чтобы обеспечить надежное решение вышеприведенного примера. Это не нативная функция, а функция, созданная пользователем, которую поддерживает MySQL версии 5+.

Если у вас есть статус пользователя Super/Admin в MySQL или локальная установка mysql на вашем собственном компьютере, вы можете создать FUNCTION (например, хранимую процедуру), который находится в вашей базе данных и может использоваться во всех будущих 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_general_ci 
BEGIN 
    DECLARE c CHAR(1); 
    DECLARE s VARCHAR(255); 
    DECLARE i INT DEFAULT 1; 
    DECLARE bool INT DEFAULT 1; 
    DECLARE punct CHAR(17) DEFAULT '()[]{},[email protected];:?/'; 
    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 имеет достаточные привилегии - если нет, и вы не можете создать временную БД на своей персональной машине для преобразования ваших таблиц, а затем спросите своего хостинг-провайдера, установит ли она эту функцию для вас.

1

создать функцию:

CREATE DEFINER=`root`@`localhost` FUNCTION `UC_FIRST`(`oldWord` VARCHAR(255)) 

RETURNS varchar(255) CHARSET utf8 

RETURN CONCAT(UCASE(LEFT(oldWord, 1)), LCASE(SUBSTRING(oldWord, 2))) 

использовать функцию

UPDATE tbl_name SET col_name = UC_FIRST(col_name); 
0
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)));