141

有人知道MySQL中这个TSQL的等价物吗?

我试着把每个条目的第一个字母大写。

UPDATE tb_Company SET CompanyIndustry=UPPER(左(CompanyIndustry,1))+SUBSTRING(公司行业,2,LEN(公司行业))

14答案14

重置为默认值
340

几乎是一样的,只需更改为使用CONCAT()函数而不是+运算符:

更新tb_CompanySET CompanyIndustry=CONCAT(UCASE(左(CompanyIndustry,1)),SUBSTRING(CompanyIndustry,2));

这会变成你好你好,wOrLd公司WOrLd公司,BLABLA公司BLABLA公司等。如果要将第一个字母大写,另一个字母小写,只需使用LCASE函数:

更新tb_CompanySET CompanyIndustry=CONCAT(UCASE(左(CompanyIndustry,1)),LCASE(SUBSTRING(CompanyIndustry,2));

请注意,UPPER和UCASE做的是相同的事情。

2
  • 1
    谢谢,这就满足了我的需要。我忘了提到我需要先设置为小写。谢谢
    – 下巴
    评论 2010年11月24日4:13
  • 知道为什么这不起作用吗?更新tb_Company SET CompanyIndustry=CONCAT(UCASE(SUBSTRING(CompanyIndustry,1,1)),LCASE(SUBSTRING)(Company Industry,2));
    – 杰伦
    评论 2023年2月27日13:57
72

文森茨对大写字母的出色回答弗斯特字母对第一个字母很有用只有整列字符串的大写。。

但是如果你想大写每个单词的第一个字母怎么办在表列的字符串中?

例如:“Abbeville高中”

我在Stackoverflow中没有找到答案。我不得不拼凑出几个在谷歌中找到的答案,为上述示例提供了一个可靠的解决方案。它不是本机函数,而是MySQL 5+版本允许的用户创建函数。

如果您在MySQL上具有Super/Admin用户状态,或者在自己的计算机上安装了本地MySQL,则可以创建一个FUNCTION(类似于存储过程),它位于数据库中,并且可以用于将来对数据库任何部分的所有SQL查询。

我创建的函数允许我使用这个我称为“UC_Words”的新函数,就像MySQL的内置本机函数一样,这样我就可以像下面这样更新完整的列:

更新表名SET column_name=UC_Word(column_name)

为了插入函数代码,我在创建函数时更改了MySQL标准分隔符(;),然后在创建函数脚本后将其重置为正常。我个人也希望输出也是UTF8字符集。

函数创建=

DELIMITER公司||CREATE FUNCTION`UC_Words`(str VARCHAR(255))返回VARCHAR(255”)CHARSET utf8 DETERMINISTIC开始声明c CHAR(1);宣言的VARCHAR(255);国际默认声明1;声明bool INT默认值1;声明穿孔字符(17)默认值'()[]{},.-_!@;:?/';集合s=LCASE(str);当i<长度(str)DO时开始集合c=子字符串(s,i,1);如果位置(c,punt)>0,则设置bool=1;ELSEIF bool=1然后开始如果c>=“a”和c<=“z”,则开始集合s=CONCAT(左(s,i-1),UCASE(c),子串(s,i+1));设置bool=0;结束;ELSEIF c>='0'和c<='9'然后设置bool=0;结束条件:;结束;结束条件:;设置i=i+1;结束;结束时;回报;结束||DELIMITER公司;

这可以处理输出字符串中多个单词的大写首字母。

假设您的MySQL登录用户名有足够的权限,如果没有,并且您无法在个人计算机上设置临时数据库来转换表,那么请询问您的共享主机提供商是否会为您设置此功能。

6
  • 4
    CHARSET utf8_通用_ci应更改为CHARSET utf8(字符集utf8)(至少5.7) 评论 2016年11月21日12:08
  • @ManuelDallaLana实际上你可能会出错操作“concat”的排序规则混合非法所以我认为只需修复字符集或删除它并将其设置为默认值即可。 评论 2018年8月19日9:30
  • @Alejandro这个答案将字符串中每个单词的第一个字母大写。问题和接受的答案只将字符串中的第一个字符大写。它们都是非常有用的答案,但适用于不同的用例。
    – 利亚姆
    评论 2019年12月5日20:24
  • 出现错误,必须使用字符集“declare s VARCHAR(255)charset utf8;”声明's',否则会丢失一些字符。无论如何,感谢您提供此解决方案:-) 评论 2019年12月23日15:42
  • 1
    还有'c':“DECLARE c CHAR(1)CHARSET utf8;” 评论 2019年12月23日15:51
21

您可以使用以下组合UCASE(),MID()CONCAT():

从名称中选择CONCAT(UCASE(MID(name,1,1)),MID(name,2))作为名称;
1
  • 这并没有降低所有其他字母。尝试选择CONCAT(UCASE(MID(‘测试’,1,1)),MID(’测试’,2)); 评论 2018年4月27日10:07
9
mysql>SELECT schedule_type AS schedule FROM ad_campaign limit 1;+----------+|时间表|+----------+|结束日期|+----------+一组1行(0.00秒)mysql>从ad_campaign限制1中选择CONCAT(UCASE(MID(schedule_type,1,1))、LCASE(MI(scheduletype,2))作为时间表;+----------+|时间表|+----------+|结束日期|+----------+一组1行(0.00秒)

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_mid

0
7

这工作得很好。

UPDATE状态SET名称=CONCAT(UCASE(LEFT(name,1)),LCASE(SUBSTRING(name,2));
5

http://forge.mysql.com/tools/tool.php?id=201

如果列中有一个以上的单词,则无法按如下所示进行操作。在这种情况下,上述UDF可能会有所帮助。

mysql>select*fromnames;+--------------+|姓名|+--------------+|约翰·亚伯拉罕+--------------+一组1行(0.00秒)mysql>SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2))作为名称FROM名称;+--------------+|姓名|+--------------+|约翰·亚伯拉罕|+--------------+一组1行(0.00秒)

或者这个可能会有帮助。。。

https://github.com/mysqludf/lib_mysqludf字符串

2
更新tb_Company SET CompanyIndustry=UCASE(LEFT(CompanyIndustry,1))+SUBSTRING(公司行业,2,LEN(公司行业))
1
  • 我只是想突出MySQL中的UCASE函数:P:) 评论 2010年11月24日3:51
2

创建功能:

CREATE DEFINER=`root`@`localhost`FUNCTION`UC_FIRST`(`oldWord`VARCHAR(255))返回varchar(255)CHARSET utf8返回连接(UCASE(LEFT(oldWord,1)),LCASE(SUBSTRING(oldWord,2)))

使用功能

更新tbl_name SET col_name=UC_FIRST(col_name);
1

如果有人试图将每个单词用空格隔开。。。

CREATE FUNCTION响应(名称VARCHAR(40))RETURNS VARCHAR(200)DETERMINISTIC开始设置@m='';设置@c=0;设置@1=1;而@c<=char_length(name)-char_length(replace(name,'',''))do设置@c=@c+1;设置@p=SUBSTRING_INDEX(名称,“”,@c);设置@k=子字符串(名称,@l,字符长度(@p)-@l+1);设置@l=字符长度(@k)+2;集合@m=concat(@m,ucase(left(@k,1)),lcase(substring(@k、2)),“”);结束while;回程配平(@m);结束;创建过程更新名称()开始从名称中选择响应(名称)作为名称;结束;

结果

+--------------+|姓名|+--------------+|阿卜杜勒·卡里姆|+--------------+
0

这应该很好地工作:

更新tb_Company SET CompanyIndustry=CONCAT(上(左(CompanyIndustry,1)),SUBSTRING(Company Industrial,2))
0
更新用户SET first_name=CONCAT(UCASE(左(first_name1)),LCASE(SUBSTRING(first_name,2)),last_name=CONCAT(UCASE(左(last_name,1)),LCASE(SUBSTRING(last_name,2));
0
选择CONCAT(UCASE(LEFT('CHRIS',1)),SUBSTRING(lower('CHRIS'),2));

以上语句可用于首字母大写,其余可用小写。

0

PostgreSQL中的解决方案(谷歌可能会出现此页面)

INITCAP(名字||''||lastname)作为全名
2
  • 1
    标题清楚地表明MYSQL 评论 2022年2月10日15:15
  • @就谷歌引领的这条线索而言,它还很年轻,所以我明确指出了这个答案可以应用的局限性。但你说得对,标题是关于MySQL的,答案是关于PostreSQL的 评论 2022年2月12日11:05
-3

Uso algo simples assim;)

DELIMITER公司$$如果存在则删除函数`uc_frist`$$创建函数`uc_frist`(str VARCHAR(200))返回VARCHAR(200)开始设置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');设置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');设置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');返回str;结束$$DELIMITER公司;
1
  • 1
    伙计。。。这与简单相反。。 评论 2021年10月15日16:18

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.