先说一下项目背景。虽然说mysql字段大多数情况命名都是小写的。但我们是从Sqlserver迁移到Mysql所以就保留了Sqlserver的命名规则。
但是又有个别表结构,命名规范不统一,因此产生了这个需求想法。
先讲一下思路。
解释函数:
CONCAT(str1,str2)字符连接函数
UPPER(str)将字符串改为大写字母
LOWER(str)将字符串改为小写字母
LENGTH(str)判定字符串长度
SUBSTRING(str,a,b)提取字段中的一段,从字符串str的第a位开始提取,提取b个字符
LEFT(str,n)提取字符串最左边的n个字符
RIGHT(str,n)提取字符串最右边的n个字符
思路:
1、用LEFT单独将首字母取出并用UPPER换成大写
2、确定字段的长度,并用SBUSTRING取出从第二位到最后一位的所有字段备用。
3、用CONCAT连接上边的两个值
4、update表中字段的值即可。
然后再生成Alter语句。
SELECT
CONCAT( 'alter table ', '表名', ' change column ', COLUMN_NAME, ' ', CONCAT(UPPER(LEFT(COLUMN_NAME,1)),SUBSTRING(COLUMN_NAME,2,LENGTH(COLUMN_NAME))) , ' ', COLUMN_TYPE, ' comment \'', COLUMN_COMMENT, '\';' ) AS '修改脚本'
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = '表名';