【问题标题】:MariaDB convert column type varchar to intMariaDB 将列类型 varchar 转换为 int
【发布时间】:2015-07-14 17:25:28
【问题描述】:

列具有(+ or -) 36:12:20:0654 形式的经度值。我想将它们更改为(+ or -) 36.12200654。我怎么做? 我试过这个命令:

alter table_name alter column column_name int;

但它会将值更改为没有符号的 36。

【问题讨论】:

  • 所以你想从degrees:minutes:seconds 转换为十进制数的递减?或者只是想摆脱那些冒号并转换为数字?
  • 我只想去掉那些冒号
  • 并将第一种颜色转换为点?无论如何,您不能将十进制数字放入 int 类型的字段中。
  • 第一种颜色是什么意思?我只想将 (+ or -) 36:12:20:0654 更改为 (+ or -) 36.12200654。我该怎么做?
  • 好的,我将第一个冒号转换为点,然后我可以看到三个点。我如何删除最后两个点。我试过这个.... "update table_name set column_name = replace(column_name, ':','.'); 但它显示的数字为 36.12..20.0654

标签: mysql sql mariadb mariasql


【解决方案1】:

我并不为我想出的复杂性感到自豪,但它确实有效:

alter table table_name add column temp double;
update table_name set temp = concat(substr(column_name, 1, position(':' in column_name) - 1), '.', replace(substr(column_name, position(':' in column_name)), ':', ''));
alter table table_name drop column column_name;
alter table table_name change column temp column_name double; 

更新:根据评论中值的新格式,更新应如下所示:

update table_name set temp = concat(substr(column_name, 1, position(':' in column_name) - 1), '.', replace(replace(substr(column_name, position(':' in column_name)), ':', ''), '.', ''))

【讨论】:

  • 我完全按照你说的做了,但最后却在列中填满了零。
  • 粘贴几个你拥有的数据的真实例子。 +/- 之后实际上有空格吗?如果是,请执行update table_name set temp = concat(replace(substr(column_name, 1, position(':' in column_name) - 1), ' ', ''), '.', replace(substr(column_name, position(':' in column_name)), ':', '')); 而不是答案中的更新。
  • -99:13:42.1773, 36:25:78.3658 等是真实的例子。
  • 这与问题中的格式不同。这个问题没有任何点。用新的UPDATE 更新了答案
  • 将列设为varchar 而不是加倍。 Double 不能保存那些零。
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2011-03-29
  • 2016-09-14
  • 1970-01-01
  • 2011-12-01
相关资源
最近更新 更多