Database and DataTable DateTime format confusion - wpf

I want to store a DateTime.Now from my WPF C# application to a DateTime column in SQL CE Database.
I am inserting DateTime.Now.ToString("yyyy-mm-dd HH:mm:ss") then I get the following error:
String was not recognized as a valid DateTime.Couldn't store <2011-54-06 18:54:47> in DateTime Column. Expected type is DateTime.
How to store DateTime in a specific format to SQL CE?
[EDIT]
Correction made to: DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
However, after I insert and populate the data to a DataGrid. It shows 2011-54-06 18:54:47 in stead of yyyy-MM-dd HH:mm:ss format. I specify the format to be insert to database but it seem SQL CE has its own way of storing. Why?

You just change the yyyy-mm-dd HH:mm:ss in to yyyy-MM-dd HH:mm:ss. Obviously it will show like that.Because, you are not inserting the Month but a minute. So, the Datetime is not converted from string format due to wrong format.

Related

Load the date separated by '/' with the Datetime datatype in sql server

INSERT INTO PUZ_DATE_FORMAT
SELECT FORMAT(GETDATE(),'d', 'it-IT') AS ItalianDate
I get this error:
Msg 242, Level 16, State 3, Line 1
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
My table contains only a single column of datetime datatype, and the format statement which I've written will give the output like 15/12/2017.
But when I try to insert a row into the table, it won't allow me to do so. It allows only dd-mm-yyyy format - not dd/mm/yyyy. Why?
Basically what you are trying to do is insert a string value to a Datetime field. In doing so, SQL Server try to cast the string to a datetime during the insert. If your string is in the Universal format (yyyy-MM-dd) it can successfully parse it without any issue. Else the string has to be in the datetime format as Server's culture.
I guess your Server's culture is en-US which has the date time format as "MM/dd/yyyy". With regarding to your date (15/12/2017) server thinks 15 is the month, 12 is the day and so on. Which is obviously falling.
If you tried this before 12th of the month, It can successfully cast, But to an incorrect value.
Further, you are not doing the right thing by, casting a Datetime to a string and then try to insert in to Datetime field. Try to store the raw Datetime in database and format accordingly when displaying in UIs.
Cheers,

How can I convert a JSON date with timezone to a SQL Server datetime?

I saved the output of a JSON object in a CSV file. I want to import the data into SQL Server. I have tried to cast the JSON date column to a SQL Server datetime data type.
select cast('2009-06-18T16:44:20+0000' as datetime)
This causes an error to be raised: Conversion failed when converting date and/or time from character string.
How can I convert a JSON date with timezone to a SQL Server datetime?
As far as I know, SQL Server recognizes timezone with colon. You have to reformat timezone part as follows:
SELECT CONVERT(datetime2, STUFF('2009-06-18T16:44:20+0000', 23, 0, ':'))
According to MSDN ISO 8601 has YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm] format.
I had a similar issue; I was getting the same error though the date format for my dates are a little different. The solution for me was to convert it to a DATETIME2 value, instead of just DATETIME. Had I not seen Pawel's answer, I would not have tried converting to DATETIME2.
The dates that I was getting were from a C# object that was serialized to JSON using JSON.Net. Below is a sample SQL script showing what the datetime values were and how to convert it.
DECLARE #effectiveDateJSON VARCHAR(MAX) =
'{"EffectiveDate":"2017-02-07T00:00:00-06:00", "CreateDate":"2017-02-07T16:32:12.9130892-06:00"}';
SELECT *
FROM OPENJSON(#effectiveDateJSON)
WITH (EffectiveDate DATETIME2 '$.EffectiveDate',
CreateDate DATETIME2 '$.CreateDate'
);
For a timezone aware conversion
declare #offset datetimeoffset = JSON_VALUE('{"d": "2021-01-01T00:00:00+03:00"}', '$.d')
declare #inCurrentTimezone datetime = #offset AT TIME ZONE CURRENT_TIMEZONE_ID()
select #inCurrentTimezone
Docs:AT TIME ZONE, datetimeoffset

How to make SQL Server to save datetime with AM/PM format?

I'm trying to make my SQL Server table datetime columns save datetime with AM/PM. How to make SQL Server to save datetime with AM/PM format?
Right now it saves date like this: 2012-01-23 14:47:00.000
Is it possible to save it 2012-01-23 02:47:00.000 PM ??
Or does SQL Server save the date and time in this format (2012-01-23 14:47:00.000) all the time and I need to convert it just on output and input?
Is it even possible to save it in this format (2012-01-23 02:47:00.000 PM)? Or does SQL Server save datetime in 24 hour format?
thanks indeed for any help. sorry for language. ;)
Internally the date and time are stored as a number.
Whether it's displayed in a 12 or 24 hour clock is up to the program formatting it for display.
As Andrew said, Datetime format is stored not as string. so, you can use CONVERT function to get the datetime value in approprate format. for example,
SELECT CONVERT(VARCHAR(20), GETDATE(), 100)
to learn more about datetime formatting, see this article
AM/PM serves only for visualization, if you need to display them, use CONVERT keyword:
SELECT CONVERT(varchar, YourDateTimeField, 109)
FROM YourTable
If you need to store AM/PM - it is makes no sense for datetime type, use varchar type instead.
You can simply use CONVERT function as following:
select CONVERT(VARCHAR,GETDATE(),108)
http://www.fmsinc.com/free/NewTips/SQL/AM_PM_time_format_in_SQL.asp
http://msdn.microsoft.com/en-us/library/Aa226054
http://blogs.msdn.com/b/kathykam/archive/2006/09/29/773041.aspx
Depending on the accuracy of the datetime you are storing you might be able to clean it up with
REPLACE(CONVERT (varchar, YourDateTimeField, 109), ':00.0000000', ' ')
This will not work if your date field is populated with GETDATE() as that means it will contain seconds and milliseconds but it will work if the field is populated by a user and seconds and milliseconds are all zeros

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value

i am working on importing data from excel to sql server. i am facing problem while i am inserting the date and datetime values in sql server. It is showing me this error:
[System.Data.SqlClient.SqlException] = {"The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.\r\nThe statement has been terminated."}
the date and date time format in excel sheet are in this format:
Date DateTime
2011-04-26 2011-04-26 13:30
What do i have to to do to import these two values to database?
That format will fail if set dateformat dmy. Make sure you have set dateformat ymd or remove the - from the dates. yyyymmdd will always work.
http://www.sommarskog.se/wishlist.html#YYYYMMDD

Sql server getdate() convert problem

Hey I have time column and datatype date.. default value is getdate() but this return format like 2011-04-24
but I want like 24.04.2011 How can I convert that format?
what is the value format?
Getdate() is a datetime. That has no specific format. If you want a specific format you must convert it into a varchar.
select convert(varchar(10),getdate(),104)
There's more info on the different conversion codes here.
An SQL Server date column does not have an associated format.
You can specify a format when converting a date to a varchar column. See the MSDN page for convert. From MSDN, 104 is mm.dd.yyyy, so you could:
select convert(varchar(12),getdate(),104)
This prints 24.04.2011.

Resources