Sql server 使用cast(日期为datetime)更新会产生不同的结果
我对此表示怀疑Sql server 使用cast(日期为datetime)更新会产生不同的结果,sql-server,Sql Server,我对此表示怀疑 UPDATE maindb SET date = CAST(date as DATETIME) WHERE date LIKE'%1974%' 所以我期待着一个结果 date 1974-12-12 1974-12-13 1974-12-14 但是当我询问 select * from maindb where date like '%1974%' 结果都是这样 May 28 1974 12:00AM SET *Some code i forgot* 120 为什么会这样
UPDATE maindb SET date = CAST(date as DATETIME) WHERE date LIKE'%1974%'
所以我期待着一个结果
date
1974-12-12
1974-12-13
1974-12-14
但是当我询问
select * from maindb where date like '%1974%'
结果都是这样
May 28 1974 12:00AM
SET *Some code i forgot* 120
为什么会这样?我记得是这样的
May 28 1974 12:00AM
SET *Some code i forgot* 120
我怎么能退后?
编辑:对于记录,我的
date
列位于varchar(20)
中,我不知道为什么,但该公司希望它建立一个新的数据库/标准化,并拥有10万条记录。我了解到,如果date列中的所有数据设置为yyyy-mm-dd
格式,您可以将该列更改为datetime
这里有两个问题
- 首先,您的
日期
字段是什么类型的?如果它确实是
,则它通常会显示您观察到的日期和时间datetime
- 其次,尽管
类型比完整的date
类型简单,但有效时间是一天开始时的午夜。因此,如果您将一个简单的datetime
字段转换为date
类型,那么您将得到日期加午夜datetime
cast date as date)
。为了明确目的,您可以使用将“date”转换为date
,以明确第一次使用date
是列名
关于将数据设置回旧值,欢迎来到奇妙的SQL世界,这里没有撤销。SQL Server确实能够在一定程度上进行恢复,但并不总是那么容易
这有点令人困惑,因为date
指的是字段类型以及其中一列的名称
如果要将日期的更正版本改装到现有字符字段中,可以尝试:
UPDATE maindb SET date=cast(cast(date as date) as char);
DATETIME
添加了时间组件。因此,当您将目标转换为时,它将在凌晨12:00初始化。要解决您的问题,请执行以下操作:
date
datatype到新列updatemaindb SET date=cast(日期为date),其中日期为“%1974%”
首先添加一列并存储转换的日期
select *, convert(datetime, date) as new_date from maindb WHERE date LIKE'%1974%'
然后更新到相应列的主表中
UPDATE maindb
SET date = new_date
或
之所以出现此“错误”,是因为
date
字段是字符类型(例如varchar(20))。将日期时间强制转换为字符类型的默认格式为0(或100)。您忘记的代码正在将其转换为120格式,例如从maindb选择CONVERT(VARCHAR(20),date,120)代码>。有关类型转换的信息,请参阅上的“日期和时间样式”。是的,我知道它是一个varchar。但是这个表已经有了10万条记录。因此,我希望将其转换为正确的datetime
日期字段位于string
中,如果我忘记了,很抱歉tell@Wowie使用字符串类型不是一个好主意。cast
仍应有效。你的专栏里有什么数据,你想要什么结果?对不起,那个数据库来自老公司。因此,我正在将其迁移到新的ok表我不想要的结果是这是1974年5月28日12:00AM
,这当然是select*from maindb
的结果我想要一个适合datetime
类型的正确结果。我尝试了更新maindb SET date=cast(date as date),其中的日期像“%1973%”这样,它工作了!我不知道为什么,convert(date,datetime)
没有?它仍然显示1974年5月28日12:00AM
@Wowie我尝试了第一个,它工作正常我使用了这个updatemaindb SET date=cast(cast(date as date)as char),其中日期像“%1974%”代码>