How to convert it to a date format in SQL Server - sql-server

I am trying to convert this time 2021-08-16 12:58:00.000 to a DateTime this way:
SELECT Convert(datetime, '16/08/2021 12:58:00:000PM');
And getting "Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.".
What am I doing wrong? Is it an invalid date time?

The issue is that your date is formatted at dd/mm/yyyy and SQL Server expects it as mm/dd/yyyy. In fact, if you do this it will succeed:
SELECT CONVERT(datetime, '08/16/2021 12:58:00:000PM');
To make it work for your format, you need to pass a style value to let SQL Server know the format you are using. For your example, this works:
SELECT CONVERT(datetime, '16/08/2021 12:58:00:000PM', 103);
103 corresponds to dd/mm/yyyy. You can see a full list of style values in the documentation at https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15

Related

SQL Server changing date format to accept d/m/y

An application is passing the below query to the SQL server and I'm receiving an exception from SQL server as The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
update Images set Created_DATE='23/09/2020 11:00:09'
where ID = 10
Additionally, I cant see the below error in Profiler.
What I've tried is,
Changes the Date format of SQL server as DMY
Change the language to en-GB
I can't change the code so how to make this work by changing SQL server configuration?
Try this:
update Images
set Created_DATE=CONVERT(DATETIME, N'23/09/2020 11:00:09', 103)
where ID = 10
You need to convert the string to date setting a culture. Otherwise, the engine is not able to understand the format as there are various formats.
I believe, your date type is DATETIME, and that's why you are getting this error:
SELECT CAST('23/09/2020 11:00:09' AS DATETIME);
result as:
Msg 242, Level 16, State 3, Line 4 The conversion of a varchar data
type to a datetime data type resulted in an out-of-range value.
for DATETIME2 it is:
Msg 241, Level 16, State 1, Line 4 Conversion failed when converting
date and/or time from character string.

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 to solve "The conversion of a varchar data type to a datetime data type resulted in an out-of-range value." error

select top 10
FormANo, Created, Changed
from
FormA
where
Created >= convert(datetime, '2015-07-05 14:04:11.000')
and Created <= convert(datetime, '2016-04-21 20:13:08.280')
when I run the query I am getting the following error
Msg 242, Level 16, State 3, Line 4
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
How can I solve this using raw SQL query in SQL Server 2014?
Most likely SQL Server is trying to parse your data in another format that you are providing.
You can set the format with one of the values from this table:
convert(datetime, '2016-04-21 20:13:08.280', 121)
121 = yyyy-mm-dd hh:mi:ss.mmm(24h)

SQL Server : convert date to YYYMMDD?

I have a date in one of the column in SQL Server, the sample dates are:
10/02/2012
23/11/2012
13/01/2012
10/02/2012
10/02/2012
I have tried the approach to convert the dates to YYYYMMDD
DECLARE #v DATE= '1/11/2012'
SELECT CONVERT(VARCHAR(10), #v, 112)
I have another column in a same table in which i want to update the date in YYYYMMDD format ,the problem here is that the date are not proper
and throws an error
DECLARE #v DATE= '23/11/2012'
SELECT CONVERT(VARCHAR(10), #v, 112)
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
Any help is appreciated in this, The date will come in any order either dd/mm/yyyy or mm/dd/yyyy, it should be able to convert it properly
You may try using the following format to one data type to another.(dd/mm/yyyy to yyyy/mm/dd)
CONVERT(data_type(length),expression,style)
As well as update like following
UPDATE table_name SET
destination_column_name=orig_column_name
WHERE condition_if_necessary
if you want to insert date in SQL server you want to follow certain formats. You can follow either yyyy-MM-dd or MM-dd-yyyy
for your question if you follow MM-dd-yyyy this format and if you using SQL server 2012 or newer you can use this and you can get the result
DECLARE #v DATE = '11/23/2012';
SELECT FORMAT ( #v, 'yyyy/MM/dd', 'en-US' )
Refer these links FORMAT (Transact-SQL) , SQL Server date format function

SQL Server ODBC canonical date format to DD/MM/YYYY?

Lets say I have a datetime from my database, such as: 2011-10-24 00:00:00.000. I would like to convert this into 24/10/2011, but I can't find the native SQL Server way to do this, and I'd rather no do this in the code after I run my query.
I've tried doing something as follows (as per the manual)
select CONVERT(datetime, '2011-10-24 00:00:00.000', 103);
But that doesn't work out, my result is:
Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
I suspect this might be due to the decimal precision, or the time part of this, but I'm not sure how to go about this without resulting to some string-hacking-regex-replace nonsense (and I'd rather no do that, I might as well end up doing the conversion after the query if I do that).
If I read the manual correctly, you should be using stlye 120 "ODBC canonical" - no??
Try:
select CONVERT(datetime, '2011-10-24 00:00:00.000', 120);
Works on my machine :-) This gives you a SQL Server DATETIME to work with.
If you want to convert that further into 24/10/2011, use a second CONVERT to convert into a VARCHAR string:
select CONVERT(VARCHAR(50), CONVERT(datetime, '2011-10-24 00:00:00.000', 120), 103)
That gives me:
24/10/2011

Resources