Convert a string to a date in sql - sql

how do I convert this:
DECLARE #FromDate varchar = 'Feb 2020'
to a Date like this
DD/MM/YYYY or DDMMYYYY
I need to sort some dates and from the combobox you can just choose those three : Dez 2019, Jan 2020 or Feb 2020.
So I thought I could do something like that:
DECLARE #FromDate varchar = 'Feb 2020';
SELECT RIGHT(convert(varchar, CONVERT(date, CONVERT(varchar, PIN_DATE)), 106),8)
FROM PIN
WHERE RIGHT(CONVERT(varchar, CONVERT(date, CONVERT(varchar, PIN_DATE)), 106),8)
= CONVERT(datetime, #FromDate,106)
The date in PIN_DATE looks like this : YYYYMMDD aka. 20201231

This is an ERROR:
DECLARE #FromDate varchar = 'Feb 2020'
This assigns #FromDate as a SINGLE character, so the value is 'F'.
When using the character types in SQL Server, always use a length:
DECLARE #FromDate varchar(255) = 'Feb 2020'

Related

Change converted format into ISO date - SQL Server

I have data where a date is stored as text, for example:
Jan 01, 2001
I see a number of examples showing how to format a datetime to this format but I'm looking for a function to change it back to a date.
What is even more confusing is what I tried gives me "2020-01-01." Any suggestions?
DECLARE #d varchar(10) = 'Jan 01, 2001'
SELECT TRY_CONVERT(date, #d)
I'm using SQL Server 2014.
Your string is not long enough. Declare it with a long-enough length:
DECLARE #d varchar(255) = 'Jan 01, 2001';
SELECT TRY_CONVERT(date, #d);
If you show the value of #d, you will see what this code returns:
DECLARE #d varchar(10) = 'Jan 01, 2001';
SELECT #d, TRY_CONVERT(date, #d);
which is 'Jan 01, 20'. SQL Server interprets that as 2020.

Converting varchar to date in SQL Server

I have a varchar column which has values like "Aug 07 2017, 04:14 AM,EDT".
I need to convert this to a date column so that its possible to take the maximum value of the date.
I tried this:
select CONVERT(datetime, #dateField, 108)
from table
But I am getting the following error:
Conversion failed when converting date and/or time from character string.
You can just use left() and convert():
select convert(date, left('Aug 07 2017, 04:14 AM,EDT', 11))
If you want a datetime then convert the date and time separately, then:
select ( convert(datetime,
left('Aug 07 2017, 04:14 AM,EDT', 11)
) +
convert(datetime,
convert(time,
substring('Aug 07 2017, 04:14 AM,EDT', 14, 8)
)
)
)
Note: This is not taking the time zone into account.
Better Datetime solution
DECLARE #dateField AS NVARCHAR(50) = 'Aug 07 2017, 04:14,EDT'
-- Get index of last comma
DECLARE #validDateField AS NVARCHAR(20) = REPLACE(LEFT(#dateField, LEN(#dateField)- CHARINDEX(',', reverse(#dateField))), ',','')
SELECT CONVERT(DATETIME, #validDateField, 108)
Here is a solution:
select CONVERT(datetime, REPLACE(LEFT(#dateField, LEN(#dateField) - 3),',','') ,108 )

SQL Server 2008 Date parameter

I'm passing a start date and end date parameter to my stored procedure. I'm doing a simple test here:
DECLARE #StartDate DATE = '10/06/2013' --dd/mm/yyyy
SELECT #StartDate -- this statement running successfully
DECLARE #EndDate DATE = '30/06/2013' --dd/mm/yyyy
SELECT #EndDate -- this statement giving error
This statement returns the following error
Msg 241, Level 16, State 1, Line 2
Conversion failed when converting date and/or time from character string.
Does anybody have idea what's going wrong with EndDate?
I'm pretty sure the error is on this line:
DECLARE #EndDate DATE = '30/06/2013' --dd/mm/yyyy
Not on the SELECT. It wouldn't make sense that it would be on the SELECT, because processing a variable should be fine.
I would recommend that you use YYYYMMDD formats. The following is my preference:
DECLARE #EndDate DATE = '2013-30-06' ;
However, it can fail for certain internationalization settings. The following is documented to always work:
DECLARE #EndDate DATE = '20133006' ;
'10/06/2013' means 06-Oct-2013 not 10-Jun-2013. There is nothing exists with month 30 as in your #EndDate '30/06/2013'.
DECLARE #StartDate DATE='10/06/2013'
DECLARE #DummyDate DATE = '2013-Oct-06'
IF #StartDate = #DummyDate
BEGIN
SELECT 1
END
By default sql server takes date value in 'yyyy-mm-dd' format,
So you need to follow that format or you need to convert date format accordingly.
T-SQL convert string to datetime - SQL Server convert string to date
SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
-- mon types are nondeterministic conversions, dependent on language setting
SELECT convert(datetime, '23 OCT 2016', 106) -- dd mon yyyy
SELECT convert(datetime, 'Oct 23, 2016', 107) -- mon dd, yyyy
-- SQL string to datetime conversion without century - some exceptions
SELECT convert(datetime, '10/23/16', 1)   -- mm/dd/yy
SELECT convert(datetime, '16.10.23', 2)   -- yy.mm.dd
SELECT convert(datetime, '23/10/16', 3)   -- dd/mm/yy
SELECT convert(datetime, '23.10.16', 4)   -- dd.mm.yy
SELECT convert(datetime, '23-10-16', 5)   -- dd-mm-yy
SELECT convert(datetime, '23 OCT 16', 6)  -- dd mon yy
SELECT convert(datetime, 'Oct 23, 16', 7) -- mon dd, yy

Date format date-month-year

I have a table which has a datetime column. I want to show date in date-month-year forma.I am using SQL Server 2008.
You need to convert datetime column
select convert(varchar,datecolumn,103) from yourtable
Some datetime convertions:
SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) AS [YYYY/MM/DD]
/* YYYY/MM/DD
2015/07/11 */
SELECT CONVERT(VARCHAR(10), GETDATE(), 112) AS [YYYYMMDD]
/* YYYYMMDD
20150711 */
-- SQL convert date string to datetime - time set to 00:00:00.000 or 12:00AM
PRINT CONVERT(datetime,'07-10-2012',110) -- Jul 10 2012 12:00AM
PRINT CONVERT(datetime,'2012/07/10',111) -- Jul 10 2012 12:00AM
PRINT CONVERT(datetime,'20120710', 112) -- Jul 10 2012
You can learn all DateTime convertion from here
FORMAT can be used for this;
SELECT FORMAT(GETDATE(), 'dd-MM-yyyy') --20-09-2021
in your case;
SELECT FORMAT(datetime, 'dd-MM-yyyy') AS datetime --20-09-2021
Edit;
Sorry to inform that I've just seen you mentioned SQL Server 2008 this code works for SQL Server 2012 for those who use 2012 and ends up in here!

str_to_date function in sql server?

MySQL has a function called STR_TO_DATE, that converts a string to date.
Question:
Is there a similar function in SQL Server?
If you need to parse a particular format, use CONVERT(datetime, #mystring, #format). Use this as a reference: https://web.archive.org/web/20200729210252/http://www.sqlusa.com/bestpractices/datetimeconversion/
Some examples:
SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd ANSI date with century
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
-- mon types are nondeterministic conversions, dependent on language setting
SELECT convert(datetime, '23 OCT 2016', 106) -- dd mon yyyy
SELECT convert(datetime, 'Oct 23, 2016', 107) -- mon dd, yyyy
-- 2016-10-23 00:00:00.000
SELECT convert(datetime, '20:10:44', 108) -- hh:mm:ss
-- 1900-01-01 20:10:44.000
What if the string is 7/7/2010?
Then use CONVERT with either 101 (mm/dd/yy) or 103 (dd/mm/yy) depending on what you want:
SELECT CONVERT(DATE, '7/7/2010', 103)
Result:
2010-07-07
CAST(<string> AS DATETIME)
Use CAST.
declare #MyString varchar(10)
declare #MyDate datetime
set #MyString = '2010-08-19'
set #MyDate = cast(#MyString as datetime)
select #MyDate
Here is a good example:
declare #myDate datetime
set #myDate = '06/09/2017'
select concat(convert(varchar(20), #myDate,101), ' -- ',
convert(varchar(20), #myDate,103), ' -- ',
convert(varchar(20), #myDate,6))
This is what you get, depending on 101 or 103 or 6:
09/06/2017 -- 06/09/2017 -- 06 Sep 17
A good summary of types of dates is here - https://www.w3schools.com/sql/func_convert.asp
On MSSQL:
select cast('2012/06/12 10:32AM' as datetime);
You will get it:
2012-06-12 10:32:00.000