How to convert integer into datetime in varchar format - sql-server

I m getting this error when trying to convert below integer into datetime in a varchar format.
Conversion failed when converting date and/or time from character string
Code:
CONVERT(VARCHAR(MAX), CAST('200901041421' AS DATETIME))

You need a space, and a colon. I'm not sure why you want to do this though... present the date in a format on your front end (presentation layer) and keep dates stored as dates or datetime in the database and you won't run into this issue :)
SELECT CONVERT(VARCHAR(MAX), CAST('20090104 14:21' AS DATETIME))
Also, no need to use MAX here. That's a waste of storage. Something like this makes more sense.
SELECT CONVERT(VARCHAR(24), CAST('20090104 14:21' AS DATETIME), 113)
Using a column name...
SELECT CONVERT(VARCHAR(24), CAST(YourColumnName AS DATETIME), 113)
FROM YourTable
You can see other conversions here

Related

How to convert from DD/mm/yyyy in varchar(max) to yyyymmdd format in SQL Server

Dates in DD/mm/yyyy format stored in a varchar(max) column need to be converted to yyyymmdd format.
The below options to convert / cast are not supported.
CONVERT(VARCHAR(19), CONVERT(DATETIME, wfm.date, 3), 112)
CONVERT(VARCHAR(50), CAST(wfm.date AS DATETIME2), 112)
CAST(CAST(wfm.date AS DATETIME2(15)) AS DATETIME)
I'm getting an error message for CONVERT syntax:
Conversion failed when converting date and/or time from character string.
For CAST syntax, I'm getting this error:
Line 1: Specified scale 15 is invalid. 'dd/mm/yyyy/ in varchar to be converted to yyyymmdd format
Ideally, don't store dates as a varchar, store them as a date and worry about the format they are displayed in in your presentation layer. Therefore, you should just do:
SELECT TRY_CONVERT(date,YourVarcharMAXDate,103);
If you must get the format yyyyMM`` (i don't recommend, change your data type of your column todate), then you can use a furterhCONVERT`:
SELECT CONVERT(varchar(8),TRY_CONVERT(date,YourVarcharMAXDate,103),112);
If the data engine can't convert the date, due to it being an invalid format, TRY_CONVERT will return NULL; you'll need to fix those values (make them valid). Another good reason why not to use a varchar to store a date.
Maybe this helps
DECLARE #dt DATETIME= '2019-12-31 14:43:35.863';
SELECT CONVERT(VARCHAR(10), #dt, 11) s1,
CONVERT(VARCHAR(10), #dt, 111) s2;
You could always just use substring for this. Example is shown below.
DECLARE #samples TABLE
(
Dates NVARCHAR(50)
)
INSERT INTO #samples VALUES
('10/11/2018'),
('12/11/2018'),
('15/11/2018'),
('17/11/2018'),
('19/11/2018'),
('20/11/2018')
SELECT
SUBSTRING(Dates, 7,4) +
SUBSTRING(Dates, 4,2) +
SUBSTRING(Dates, 1,2) as [NewDate]
FROM #samples
Output will be a list of strings with your required format. This won't validate for you, but you can always try convert these to a date using CAST and it should correctly cast the yyyyMMdd to a date if the date is correct.
If you're using SQL Server 2016 or newer, you can use PARSE and FORMAT to do this quite easily:
SELECT
FORMAT(PARSE(wfm.Date AS DATE USING 'de-DE'), 'yyyyMMdd')
FROM
dbo.WhateverYourTableNameIS
The dd/mm/yyyy format is the format used e.g. in Germany, that's why I'm using the de-DE culture to convert that string to a DATE. Then you can format it using the usual formatting strings as used in C#/.NET.
select convert(varchar, convert(datetime, wfm.date, 103), 112)

Out of range when converting data SQL Server

I have a varchar column with string like date dd.mm.yyyy and I need it to convert to same string only with different format like yyyy.mm.ddT00:00:000
SOLVED: 1st Test:
SELECT REPLACE(CONVERT(varchar, CAST(table.DATE AS datetime), 126),'-','.') AS date
FROM tabletest.DBO.TABLE
Result:
I get 5 values (from more than 1000) and msg:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
SOLVED: 2nd Test:
SELECT REPLACE(CONVERT(varchar, (RIGHT(GREMPG1.DAT,4)+SUBSTRING(GREMPG1.DAT,3,4)+LEFT(GREMPG1.DAT, 2) + ), 126),'-','.') AS Datums
FROM tabletest.DBO.GREMPG1
Cannot find solution on how to get second part to this.
Maybe there is some shortest way yo convert columns record format?
Thanks.
Edited:
For second query:
Old value: 01.03.2014
New value: 2014.03.01
Need to get: 2014.03.01T00:00:00
For your first test try this way -
SELECT REPLACE(CONVERT(varchar, CONVERT(datetime,table.DATE,103), 126),'-','.') AS date FROM tabletest.DBO.TABLE
For your 2nd try -
SELECT REPLACE(CONVERT(varchar, CAST((RIGHT(GREMPG1.DAT,4)+SUBSTRING(GREMPG1.DAT,3,4)+LEFT(GREMPG1.DAT, 2)) AS DATETIME), 126),'-','.') AS Datums FROM tabletest.DBO.GREMPG1
Use this:
SELECT REPLACE(CONVERT(varchar, CONVERT(datetime,'15.02.2012',104), 126),'-','.') AS date
You get confision with the date when you cast. 15.02.2012 is calculated as mm.dd.yyyy and because there is not month 15 you get error.
So you query will look like:
SELECT
REPLACE(CONVERT(varchar, CONVERT(datetime,table.DATE,104), 126),'-','.') AS date
FROM
tabletest.DBO.TABLE;
Your SELECT seems to work. Try this:
declare #d VARCHAR(100)='13.12.2015';
SELECT REPLACE(CONVERT(varchar, CAST(#d AS datetime), 126),'-','.') AS date
/*
Result: 2015.12.13T00:00:00
*/
If it does NOT work, I'd assume a culture issue (date formats are handled quite differently according to your system's language and country).
If it works, I'd assume at least one value in your db being bad...

cast in sql server yyyy/mm/dd instead of dd/mm/yyyy

I have a script to insert 1000 rows of data in a table, in the datetime column I have this information.
CAST(N'2015-05-14 00:00:00.000' AS DateTime)
The problem is cast is trying to cast in dd/mm/yyyy format where the input is in yyyy/mm/dd format.
Don't use cast when converting varchar to datetime, use convert instead, as convert takes in a date format.
convert(datetime, '2015-05-14 00:00:00.000', 121)
See more at:
http://www.sqlusa.com/bestpractices/datetimeconversion/
its already written that way since i have a generated script of data to insert, so i cant change one by one, too many rows to insert
Are you unable to modify the script? This seems like an easy find/replace.
CAST(N' -> convert(datetime, '
' AS datetime) -> ', 121)

can't find the date style format in sql server 2012

I want to convert this nvarchar column to Datetime format:
"29/12/14 07:46:20 PM"
This style is good but has no time:
SELECT CONVERT(datetime, nvarcharDateColumn, 3) AS [DD/MM/YY]
How can i convert it and keep all the date parts (date+time) ??
A datetime data type in SQL Server has no "format". It is natively a 8-byte binary value. To convert the nvarchar string to datetime, use CONVERT with the nvarchar column as the second parameter:
SELECT CONVERT(datetime, nvarcharColumnWithDateAndTime, 3) AS NativeDateTime
FROM dbo.YourTable;
Note the datetime format displayed by this query is determined by the application your are using, not the SQL Server database. Also, consider changing the table data type to datetime to avoid data integrity issues; nvarchar will allow storing invalid dates.
This one has time, however includes Miliseconds...it could be too much :)
SELECT CONVERT(VARCHAR(30), GETDATE(), 131)
This is a harder task that I would have thought. This is the best I could come up with:
DECLARE #MyDate DATETIME
SET #MyDate = GETDATE()
SELECT CONVERT(VARCHAR(50), #MyDate, 3) + ' ' + CONVERT(VARCHAR(50), CONVERT(TIME, #MyDate), 100)

Need help on DateTime Conversion in Sql Server 2005

I am facing problem in DateTime converstion.
My input is 09/22/2011, I need to convert into 20110922.
I tried the below one, but failed.
Select CONVERT(VARCHAR(8),'09/22/2011' , 112) as DateConv
Here you go:
SET DATEFORMAT mdy
SELECT CONVERT(VARCHAR(8), CAST('09/22/2011' as DATETIME) , 112) AS DateConv
If your input is actually a dateTime variable like you said (but didn't show in your code example), you can simplify this down to:
SELECT CONVERT(VARCHAR(8), #myDate , 112) AS DateConv
This will do the trick:
select year('09/22/2011') * 10000 + month('09/22/2011') * 100 + day('09/22/2011')
Without any other information, SQL is interpreting the '09/22/2011' as a varchar already, and just passes the data through (ignoring CONVERT's style argument). If you use the following line:
SELECT CONVERT (VARCHAR (8), CAST ('09/22/2011' as DATETIME), 112) as DateConv
it should work as expected since it will then view the '09/22/2011' as a date value. If you were getting the date from a column in a table, it would already know the type and you will not need to worry about the CAST portion of the expression, just use the column name.

Resources