mysql - 一次修改多个数据库列的格式

标签 mysql phpmyadmin format multiple-columns

我已使用 phpmyadmin 将 csv 表导入到 sql 数据库中。我猜默认格式是十进制(8,5),或者至少是这样的。似乎有点过分了,我想我可以减少到 4,1。问题是大约有 470 个字段。我知道如何一次更改一个,但这需要很长时间。有没有更快的方法?

最佳答案

我只有Sql Server 2008 R2,但似乎MySQL解决方案可能类似。我试图尽可能地将它与 MySQL 保持一致,但是如果没有 MySQL 引擎,我无法检查它......因此,对于它的值(value),这是我的脚本(在 Sql Server 中测试):

-- I believe this is 'CREATE TEMPORARY TABLE' in MySql
create table #tbl
(
    ownerName sysname -- `sysname` is nvarchar(128) the max identifier length
    , tableName sysname
    , colName sysname
    , colType sysname
    , colPrecision int
    , colScale int
)
insert #tbl
select table_schema, table_name, column_name, data_type, numeric_precision, numeric_scale
FROM information_schema.columns
where data_type = 'decimal' and numeric_precision = 8 and numeric_scale = 5

-- Note: It is 'MODIFY COLUMN' in MySQL
declare @newPrecision int = 4, @newScale int = 1
DECLARE @sql varchar(max) = ''
select @sql = @sql + CHAR(13) + CHAR(10) + 'ALTER TABLE ' + ownerName + '.' + tableName + ' ALTER COLUMN ' 
    + colName + ' decimal(' + cast(@newPrecision as varchar(max)) + ',' + cast(@newScale as varchar(max)) + ')'
from #tbl
/**
    -- In MySql, GROUP_CONCAT() may work
    select @sql = GROUP_CONCAT( 'ALTER TABLE ' + ownerName + '.' + tableName + ' MODIFY COLUMN ' 
    + colName + ' decimal(' + cast(@newPrecision as varchar(max)) + ',' + cast(@newScale as varchar(max)) + ')' SEPARATOR ' ' )
    from #tbl
**/

print @sql
execute ( @sql )

关于mysql - 一次修改多个数据库列的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932508/

相关文章:

mysql - 两个独立的查询瞬间。使用子查询查询非常慢。为什么? mysql/mariadb

MySQL Case 语句,在 'Statement List' 中返回多行(Then...之后的部分)

phpmyadmin导出表失败

Java 8 LocalDateTime 和奇怪的区域行为

javascript - 如何使用 JavaScript 捕获和格式化表格数据?

mysql - 两个表之间的条件语句

php - 抓取html时另一个数据日期值为null

MySQL - 无法创建/写入文件错误

mysql - SELECT ... INTO 了解其行为

javascript - jQuery:如何为输入字段值设置固定小数