【问题标题】:I want to change datatype of a column [varchar] to [datetime] in sql without losing the data我想在 sql 中将列 [varchar] 的数据类型更改为 [datetime] 而不会丢失数据
【发布时间】:2015-07-14 10:35:48
【问题描述】:

我已尝试保存更改,但出现此错误:

不允许保存更改您所做的更改需要 以下表将被删除并重新创建。你有...

例如,
PersonID    In_time     Out_time
15001        10:00 AM    7:20 PM
15002        10:10 AM    7:10 PM
15003        10:15 AM    7:00 PM

'in_time' 和 'out_time' 字段在 varchar(50) 中

我想将列的数据类型从varchar 更改为datetime

我只是在 GUI 中尝试,而不是在查询中。因为我是..,如果我编写了任何错误的脚本,它会丢失数据,所以我知道该怎么做 我是 sql 新手。所以请建议我该怎么做..

【问题讨论】:

  • 提供存储在 varchar 列中的示例数据。你还在使用 MySql 还是 SQL-Server?
  • 列名是“In_TIme”值是晚上 10:00 我正在使用 Sql server..
  • 欢迎来到 SO。为了帮助您,我们需要查看您的代码和数据库的结构。到目前为止,唯一的猜测是,您试图做一些您没有所需权利的事情。也许它会帮助你检查出来。
  • 我试图发布图片,但它说“您的声誉分数很低..”我该怎么办..?是的,我是新手。
  • 邮政编码,不是图片。

标签: sql-server datetime type-conversion


【解决方案1】:

创建 TEMP 表以从表中复制值,然后将值从表复制到临时表。在它之后你可以用日期截断你的表或列,在它之后你可以将 nvarchar 列的数据类型更改为日期时间,在它将值从临时表复制到普通表之后,你可以执行以下操作:

-- Creation of sample table
CREATE TABLE ChangeColType
(
    Data NVARCHAR(20)
)

-- Inserting sample data 
INSERT INTO ChangeColType VALUES ('10:00 AM')

-- Creatig temp table
CREATE TABLE #TempValues
(
    Data NVARCHAR(50)
)

-- Copying values from table to temp table
INSERT INTO #TempValues
SELECT Data 
FROM ChangeColType

-- Truncating your table
TRUNCATE TABLE ChangeColType

-- Changing datatype of your column
ALTER TABLE ChangeColType
ALTER COLUMN Data DATETIME

-- Copying back values from temp table to your table
INSERT INTO ChangeColType
SELECT Data 
FROM #TempValues

-- Selecting values from table after datatype changed
SELECT CONVERT(varchar(15),CAST(Data AS TIME),100)   
FROM ChangeColType

-- Dropping temp table
DROP TABLE #TempValues

【讨论】:

    【解决方案2】:

    如果您通过 GUI 更改表的结构,请检查:

    工具菜单 -> 自定义 -> 转到左侧菜单上的 Designers voice,并取消选中“防止保存需要重新创建表格的更改”。

    【讨论】:

    • 它说 - 警告:从 'varchar(50)' 转换列 'intime' 的数据可能会丢失。 - 警告:从 'varchar(50)' 转换列 'outtime' 可能会丢失数据。
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 2018-10-30
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多