我正在SQL数据库上工作,我有一个名为"价格"的列.当创建数据库时,列"Price"被设置为NVARCHAR,我需要将其类型更改为decimal(18, 2),而不会丢失数据库中的数据.这应该由SQL脚本来完成

我想创建一个新列,将数据移动到其中,删除旧列,然后重命名新创建的列.

有人能帮我举一个如何做到这一点的例子吗? 另外,SQL中是否有将字符串解析为小数的函数?

谢谢

推荐答案

不需要两次添加新列,只需在更新新列后删除旧列即可:

ALTER TABLE table_name ADD new_column_name decimal(18,2)

update table_name
set new_column_name = convert(decimal(18,2), old_column_name)

ALTER TABLE table_name DROP COLUMN old_column_name

请注意,如果old_column_name不是数字,convert可能会失败.

Database相关问答推荐

MongoDB根据嵌套文档中的值匹配数组

Prisma - 将属性的类型设置为枚举数组

如何使用存储在数据库表中的属性配置 Spring bean

MongoDB和Redis有什么区别?

分布式数据库管理系统 (DDBMS) 中的水平与垂直碎片

更新数据库后如何更新redis?

NOSQL 非规范化数据模型

使用 2 个进程处理数据库

将图像文件存储在 Mongo 数据库中,这是个好主意吗?

在 PostgreSQL 中使用 pg_notify(text, text) 监听/通知

从旧数据 struct 到新数据 struct 的数据迁移

MySQL是否允许使用点创建数据库?

使用多个数据库模式的 JPA

有什么理由不应该在生产中使用 h2 数据库?

对于 N:M 关系,在 MongoDB 中推荐的级联删除等效项是什么?

如何在 MySQL 中清理或调整 ibtmp1 文件的大小?

在 MYSQL 的子查询中使用 LIMIT 关键字的替代方法

在一个查询中使用 group by 计算多列

在两列之间 Select 最近的日期

使用命令行在 Mysql 中导入压缩文件