2010-11-24 21 views
78

このTSQLと同等のものをMySQLの言葉で知っている人はいますか?最初の文字を大文字にします。 MySQL

私は各エントリの最初の文字を大文字にしようとしています。あなたがUCASE()MID()CONCAT()の組み合わせを使用することができます

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は012になりますなどWOrLdから、wOrLdBLABLAからBLABLA、あなたは大文字に最初の文字と小文字他をしたい場合は、あなただけのLCASE関数を使用する必要があります:UPPERとUCASEが行うこと

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

は注意同じこと。

+1

ありがとう - 私はまず小文字に設定する必要があることを忘れていました。ありがとう – Chin

16

:それはほとんど同じだ

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

は、これは動作しない、+ MySQLで、連結演算子ではないでしょう。 –

+1

Enrico Pallazzoさんが投稿した回答はちょうどうまくいくはずです –

+0

私はちょうどMySQLのUCASE関数を強調しようとしていました:P: –

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) 

それとも、この1は、これがうまく働いている...

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

をするのに役立ちます。

更新状態セット名= CONCAT(UCASE(LEFT(名前、1))、 LCASE(SUBSTRING(名前、2)))。大文字まずの手紙のための

30

Vincents優れた答えは...最初の文字列全体の文字列の唯一総額のために素晴らしい作品

しかし、あなたはすべての単語の最初の文字を大文字にしたい場合はどのようなテーブル列の文字列に

例:「アブビル高等学校」私はStackOverflowの中でこれに答えを見つけることができた

。上記の例を確かなものにするために、私はGoogleで見つけたいくつかの答えを一緒に綴じなければならなかった。これはネイティブ関数ではなく、MySQLバージョン5以上で可能なユーザ作成関数です。

MySQL上のスーパー/管理者ステータスがある場合、または自分のコンピュータにローカルmysqlをインストールしている場合は、データベースに格納されているFUNCTION(ストアドプロシージャのような)を作成し、今後のすべてのSQLクエリで使用できますdbの任意の部分。

UPDATE Table_name 
SET column_name = UC_Words(column_name) 

を挿入するには:

は、私が作成した関数は、私はこのような完全な列を更新できるように、私はただのMySQLのネイティブ関数に建てられたような「UC_Words」と呼ばれるこの新しい機能を使用することができます関数の作成中に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ログインユーザー名に十分な特権があると仮定すると、そうでない場合はテーブルを変換するためにあなたの個人用マシンに一時DBを設定することはできません。

+3

'CHARSET utf8_general_ci'を' CHARSET utf8'に変更する必要があります(少なくとも5.7) –

1

FUNCTIONをCREATE:

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))) 

使用FUNCTION

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))); 
関連する問題