Need help on DateTime Conversion in Sql Server 2005 - sql-server

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.

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...

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)

How to convert a datetime to string in T-SQL

I'm surprised not to be able to find this question here already.
I have a date time var and I want to convert it to a string so that I can append it to another string. I want it in a format that can be converted easily back to a date time.
How can I do this?
(I want the date part and the time part.)
The following query will get the current datetime and convert into string. with the following format yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar(25), getdate(), 120)
SQLFiddle Demo
SQL Server Date Formats
There are many different ways to convert a datetime to a string. Here is one way:
SELECT convert(varchar(25), getdate(), 121) – yyyy-mm-dd hh:mm:ss.mmm
See Demo
Here is a website that has a list of all of the conversions:
How to Format datetime & date in SQL Server
In addition to the CAST and CONVERT functions in the previous answers, if you are using SQL Server 2012 and above you use the FORMAT function to convert a DATETIME based type to a string.
To convert back, use the opposite PARSE or TRYPARSE functions.
The formatting styles are based on .NET (similar to the string formatting options of the ToString() method) and has the advantage of being culture aware. eg.
DECLARE #DateTime DATETIME2 = SYSDATETIME();
DECLARE #StringResult1 NVARCHAR(100) = FORMAT(#DateTime, 'g') --without culture
DECLARE #StringResult2 NVARCHAR(100) = FORMAT(#DateTime, 'g', 'en-gb')
SELECT #DateTime
SELECT #StringResult1, #StringResult2
SELECT PARSE(#StringResult1 AS DATETIME2)
SELECT PARSE(#StringResult2 AS DATETIME2 USING 'en-gb')
Results:
2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000
SELECT CONVERT(varchar, #datetime, 103) --for UK Date format 'DD/MM/YYYY'
101 - US - MM/DD/YYYY
108 - Time - HH:MI:SS
112 - Date - YYYYMMDD
121 - ODBC - YYYY-MM-DD HH:MI:SS.FFF
20 - ODBC - YYYY-MM-DD HH:MI:SS
There are 3 different methods depending on what I is my requirement and which version I am using.
Here are the methods..
1) Using Convert
DECLARE #DateTime DATETIME = GETDATE();
--Using Convert
SELECT
CONVERT(NVARCHAR, #DateTime,120) AS 'myDateTime'
,CONVERT(NVARCHAR(10), #DateTime, 120) AS 'myDate'
,RIGHT(CONVERT(NVARCHAR, #DateTime, 120),8) AS 'myTime'
2) Using Cast (SQL Server 2008 and beyond)
SELECT
CAST(#DateTime AS DATETIME2) AS 'myDateTime'
,CAST(#DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
,CAST(#DateTime AS DATE) AS 'myDate'
,CAST(#DateTime AS TIME) AS 'myTime'
,CAST(#DateTime AS TIME(3)) AS 'myTimeWithPrecision'
3) Using Fixed-length character data type
DECLARE #myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, #DateTime, 120);
DECLARE #myDate NVARCHAR(10) = CONVERT(NVARCHAR, #DateTime, 120);
SELECT
#myDateTime AS 'myDateTime'
,#myDate AS 'myDate'
You can use the convert statement in Microsoft SQL Server to convert a date to a string. An example of the syntax used would be:
SELECT convert(varchar(20), getdate(), 120)
The above would return the current date and time in a string with the format of YYYY-MM-DD HH:MM:SS in 24 hour clock.
You can change the number at the end of the statement to one of many which will change the returned strings format. A list of these codes can be found on the MSDN in the CAST and CONVERT reference section.
Check CAST and CONVERT syntax of t-sql:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
Try below :
DECLARE #myDateTime DATETIME
SET #myDateTime = '2013-02-02'
-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, #myDateTime, 120), 10)
This has been answered by a lot of people, but I feel like the simplest solution has been left out.
SQL SERVER (I believe its 2012+) has implicit string equivalents for DATETIME2 as shown here
Look at the section on "Supported string literal formats for datetime2"
To answer the OPs question explicitly:
DECLARE #myVar NCHAR(32)
DECLARE #myDt DATETIME2
SELECT #myVar = #GETDATE()
SELECT #myDt = #myVar
PRINT(#myVar)
PRINT(#myDt)
output:
Jan 23 2019 12:24PM
2019-01-23 12:24:00.0000000
Note:
The first variable (myVar) is actually holding the value '2019-01-23 12:24:00.0000000' as well. It just gets formatted to Jan 23 2019 12:24PM due to default formatting set for SQL SERVER that gets called on when you use PRINT. Don't get tripped up here by that, the actual string in (myVer) = '2019-01-23 12:24:00.0000000'
In the stored procedure for me works something like this.
convert(varchar(10), StartingDate) AS 'StartingDate'

Remove time from DateTime sql server 2005

I need date part from datetime. in format of "dd-mm-yyyy"
I have tried follwoing
Query:
select Convert(varchar(11), getdate(),101)
Output:
01/11/2011
Query
SELECT cast(floor(cast(GETDATE() as float)) as datetime)
Output
2011-01-11 00:00:00.000
Query:
SELECT
CONVERT(VARCHAR(MAX),DATENAME(DD,GETDATE())) + '-' +
CONVERT(VARCHAR(MAX),DATEPART(MONTH,GETDATE())) + '-' +
CONVERT(VARCHAR(MAX),DATENAME(YYYY,GETDATE())) `
Output:
11-1-2011 i.e. "d-m-yyyy"
I required output in "dd-mm-yyyy" format.
SELECT CONVERT(VARCHAR(10),GETDATE(),105)
Try:
SELECT convert(varchar, getdate(), 105)
More here.
Here you can find some examples how to do this: http://blog.pengoworks.com/index.cfm/2009/1/9/Useful-tips-and-tricks-for-dealing-with-datetime-in-SQL
Using the CONVERT function "works" but only if you're comparing strings with strings. To compare dates effectively, you really need to keep the SMALLDATETIME data type strongly typed on both side of the equation (ie "="). Therefore 'apros' comment above is really the best answer here because the blog mentioned has the right formulas to use to strip off the time component by "flattening" it to midnight (ie 12:00:00) via rounding and any date column in SQL Server 2005 will always default to 12:00:00 if the date is given without a time.
This worked for me ...
select dateadd(day, datediff(day, '20000101', #date), '20000101')

Resources