【发布时间】:2012-11-28 08:37:08
【问题描述】:
我需要在我的表中插入一个varchar。表中的类型是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')
但这只会带来同样的问题。任何人看到我做错了什么?
谢谢
【问题讨论】:
-
你怎么在select和insert语句中使用同一张表?
-
桌子上会不会有触发器?
-
您正在插入一个常量字符串或字段值?
-
我正在做的实际上是从 Visual Studio 调用此查询并动态给出日期。我将查询作为带有输入值的字符串传递。但目前我只是在 sql server 中测试查询,因为只要它在那里不起作用,在我的应用程序中使用它就没有用。我正在使用同一张表,因为我需要将项目从一个日期复制到另一个日期。所以项目需要在 2 个不同的日子里完全一样
-
旁注 - 当您从 Visual Studio 传递值时(可能来自 VS 中的 .NET 程序),您应该将它们作为
DateTimes 传递,而不是来回转换到字符串。
标签: sql sql-server sql-server-2008 datetime insert