一尘不染

将转换后的varchar插入datetime sql

sql

我需要varchar在表格中插入一个。表中的类型是a,datetime因此我需要对其进行转换。我不认为这会是一个大问题,但是它会一直插入1900-01-01 00:00:00.000而不是我想要的日期。当我对转换后的日期进行选择时,它确实会向我显示正确的日期。

我将向您显示代码:

INSERT INTO Item (CategoryId, [Date], Content, CreatedOn)
   SELECT 
       CategoryId, Convert(datetime, '28/11/2012', 103), Content, GetDate()
   FROM 
       Item i
   JOIN 
       Category c ON i.CategoryId = c.Id
   JOIN 
       Division d ON d.Id = c.DivisionId
   WHERE 
       Date = Convert(datetime, '31/03/2005', 103) 
       AND d.Id = '142aaddf-5b63-4d53-a331-8eba9b0556c4'

where子句可以完美工作,并为我提供所需的过滤项目,除转换日期外,所有数据均已正确插入。就像我说的1900 -…

如果我只是这样选择:

SELECT CategoryId, Convert(datetime, '28/11/2012', 103), Content, GetDate()
FROM Item i
JOIN Category c ON i.CategoryId = c.Id
JOIN Division d ON d.Id = c.DivisionId
WHERE Date = Convert(datetime, '31/03/2005', 103) AND d.Id = '142aaddf-5b63-4d53-a331-8eba9b0556c4'

我得到的正确日期是:2012-11-28 00:00:00.000。我尝试使用不同的转换,例如:

Convert(datetime, '20121128')

但这只会带来同样的问题。有人看到我在做什么错吗?

谢谢


阅读 136

收藏
2021-05-23

共1个答案

一尘不染

如果必须使用基于字符串的日期格式,则应选择一种 安全 且可在每个SQL Server实例中使用的日期格式,而不管日期格式,语言和区域设置如何。

该格式称为 ISO-8601 格式,可以是

YYYYMMDD      (note: **NO** dashes!)

或者

YYYY-MM-DDTHH:MM:SSS

DATETIME列。

所以代替

Convert(datetime, '28/11/2012', 103)

你应该用

CAST('20121128' AS DATETIME)

那你应该没事的

如果您使用的是SQL Server 2008
,则在只需要日期(无时间部分)的情况下,也可以考虑使用DATE(代替DATETIME)。这将比使用DATETIME时间部分总是容易得多。00:00:00

2021-05-23