Insert converted varchar into datetime sql

帅比萌擦擦* 提交于 2021-02-20 19:53:51

问题


I need to insert a varchar in my table. The type in the table is a datetime so I need to convert it. I didn't think this would be to big of a problem however it keeps inserting 1900-01-01 00:00:00.000 instead of the date I want. When I do a select with my converted date it does show me the correct date.

I'll show you the code:

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'

The where clause works perfectly and gives me the filtered items I need, all data is correctly inserted except for the converted date. The gives like I said 1900-...

If I just do the select so:

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'

I get the correct date being: 2012-11-28 00:00:00.000. I have tried to use a different conversion like:

Convert(datetime, '20121128')

But that just gives the same problem. Anyone that sees what I'm doing wrong?

Thx


回答1:


If you must use a string-based date format, you should pick one that is safe and works in every SQL Server instance, regardless of date format, language and regional settings.

That format is known as ISO-8601 format and it's either

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

or

YYYY-MM-DDTHH:MM:SSS

for a DATETIME column.

So instead of

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

you should use

CAST('20121128' AS DATETIME)

and then you should be fine.

If you're on SQL Server 2008 - you could also look into using DATE (instead of DATETIME) for cases when you only need the date (no time portion). That would be even easier than using DATETIME and having the time portion always be 00:00:00




回答2:


Just wanted to throw out the fact that I found this SO Question (and many others like it) years later while trying to find the answer to my problem.

If you are troubleshooting this inside a stored procedure, the parameter of the stored procedure is where you need to modify. The programmer who created the code I'm troubleshooting had @ddt CHAR(10) and no modifications inside the stored procedure resolved the problem. I had to change the parameter to @ddt smalldatetime.



来源:https://stackoverflow.com/questions/13600924/insert-converted-varchar-into-datetime-sql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!