SQL Convert Date from dd.mm.yyyy to dd-mm-yyyy - sql

I want to select data which is set in a specific date range. Unfortunately I get the date in this form:
01.05.2016 and 02.06.2016
In the database, the date are in the form:
2013-06-21
How can I convert the date in my sql query?
SELECT `artikel`.*
FROM `artikel`
WHERE (buchungsdatum >= '01.05.2016') AND (buchungsdatum <= '02.06.2016')

If this is MySQL, you can use STR_TO_DATE:
SELECT `artikel`.*
FROM `artikel`
WHERE
buchungsdatum >= STR_TO_DATE('01.05.2016','%d.%m.%Y')
AND buchungsdatum <= STR_TO_DATE('02.06.2016', '%d.%m.%Y')
Check here for the available date formats.

Try DATE_FORMAT() function of mysql as DATE_FORMAT() function is used to display date/time data in different formats.:
SELECT `artikel`.*
FROM `artikel`
WHERE (DATE_FORMAT(buchungsdatum, "%d.%m.%Y") >= '01.05.2016') AND (DATE_FORMAT(buchungsdatum, "%d.%m.%Y") <= '02.06.2016')

You can try this:
select
SUBSTRING(convert(varchar(10),REPLACE('01.05.2016','.', ''),103),5,4)+ '-'+
SUBSTRING(convert(varchar(10),REPLACE('01.05.2016','.', ''),103),3,2)+'-'+
SUBSTRING(convert(varchar(10),REPLACE('01.05.2016','.', ''),103),1,2)
It formats 01.05.2016 to 2016-05-01
I have to mention that it changes the 01.05.2016 to 01052016 and then it formats it.

Related

Convert Full Date as String to Date SQL Server

I have a table with the column EPDATA, varchar(25) field in the format down below.
How do I convert this format to YYYY-MM-DD?
E.g 2020-12-16
You can simply use try_conver().
FYI: try_convert() will return a NULL if the conversion fails.
Example:
Select try_convert(date,'Jun 10 2016 12:00AM')
Returns
2016-06-10
Convert it to date datatype and format it like so:
SELECT FORMAT(CAST(EPDATE AS DATE) ,'yyyy-MM-dd')
FROM tablename
Use FORMAT
Select FORMAT(COLUMNNAME, 'YYYY-MM-dd')
Also,By CONVERT
SELECT CONVERT(varchar, COLUMNNAME, 23)
You can convert the way you want with this query.
CASE
WHEN SUBSTRING(#date,1,3)='Jan' THEN SUBSTRING(#date,8,11)+'-01-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Feb' THEN SUBSTRING(#date,8,11)+'-02-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Mar' THEN SUBSTRING(#date,8,11)+'-03-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Apr' THEN SUBSTRING(#date,8,11)+'-04-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='May' THEN SUBSTRING(#date,8,11)+'-05-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='June'THEN SUBSTRING(#date,8,11)+'-06-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='July'THEN SUBSTRING(#date,8,11)+'-07-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Aug' THEN SUBSTRING(#date,8,11)+'-08-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Sep' THEN SUBSTRING(#date,8,11)+'-09-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Oct' THEN SUBSTRING(#date,8,11)+'-10-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Nov' THEN SUBSTRING(#date,8,11)+'-11-'+SUBSTRING(#date,5,6)
WHEN SUBSTRING(#date,1,3)='Dec' THEN SUBSTRING(#date,8,11)+'-12-'+SUBSTRING(#date,5,6)
END

SQL querying with DATES - not pulling correct data

I'm running a simple query where I am trying to filter by a date, like this...
Select * from tblPurchasedProducts
WHERE PurchasedOn >= '11/04/2016' AND PurchasedOn <= '11/08/2016'
But I am not able to see any results for 11/8/2016. I'm only able to see everything prior to 11/08/2016.
The date is saved in SQL SERVER as smalldatetime. I'm really not sure if this has anything to do with it.
Is the time an issue in this case.
I am required to save the PurchasedOn date with as datetime
EDIT:
#lamak
WHERE PurchasedOn >= '20161104' AND PurchasedOn <= '20161108'
You need to be careful with your conditions. By using <= '11/08/2016' it's using the 00:00:00 time, that's why you are not getting results. Use:
SELECT *
FROM tblPurchasedProducts
WHERE PurchasedOn >= '20161104' AND PurchasedOn < '20161109';
Dates in SQL are formatted YYYY MM DD, so you would write '2016/04/11'
Unless you override it but you will need to specify the date format.
Try:
Select * from tblPurchasedProducts
WHERE PurchasedOn BETWEEN '2016-11-04' AND '2016-11-08'

change the date format in sql server

I have a date value as below in my table.
2015-05-25
I want to convert the values as below.
05/25
How to do this? Date value is having date datatype.
Use the CONVERT function to change it to mm/dd/yy (style 1)
And the LEFT function to only select mm/dd (integer_expression 5)
SELECT LEFT(CONVERT(date, 1), 5)
FROM yourtable
Input:
2015-05-25
Output:
date
05/25
Try:
select convert(varchar(5),getdate(),101)
Give it format by using Tostring()
string date = YourDate.ToString("MM/dd");
Write as:
SELECT Left(CONVERT(VARCHAR(8), GETDATE(), 1),5) AS [MM/DD]
If you are using SQL Server 2012 (or more), I advise you using the new FORMAT function:
SELECT FORMAT(#date, 'MM/dd')

Sybase date comparison - Correct format?

I'm pretty new to Sybase and am writing a query to return results after a specified date, and also before a specified date. MM/DD/YYYY format
At the moment im doing..
SELECT *
From aTable
WHERE afterDate >= 08/07/2013
AND beforeDate <= 08/08/2013
I'm getting records back, but as I'm a Sybase newbie, I want to be sure Sybase is interpreting these dates correctly..
Their online doc is pretty bad for basic explanations on things like this!
Anyone able to confirm if what I have works, or does it need some formatting round the dates?
You'll need to convert the dates into DATETIME and tell sybase what the format is to be sure.
According to this documentation the code for MM/DD/YYYY is 101, so something like this:
SELECT *
FROM aTable
WHERE afterDate >= CONVERT(DATETIME,'08/07/2013',101)
AND beforeDate <= CONVERT(DATETIME,'08/08/2013',101)
You can see the difference by running the following select statements:
SELECT CONVERT(DATETIME,'08/07/2013',101) --MM/DD/YYYY (2013-08-07 00:00:00.000)
SELECT CONVERT(DATETIME,'08/07/2013',103) --DD/MM/YYYY (2013-07-08 00:00:00.000)
For any date-time field in sybase, instead of going through the convert function, there is a more direct approach.
SELECT *
From aTable
WHERE afterDate >= '2013-08-07'
AND beforeDate <= '2013-08-08'
The date has to be in the form 'YYYY-MM-DD'
If you want to add a time, it can be included along with the date. The date and the time have to be separated by a T.
Any date time field can be directly used using the format 'YYYY-MM-DDTHH:MM:SS'
Using the functions is too lengthy. Noone needs a bazooka to shoot a squirrel! :)
CAST( '2000-10-31' AS DATE )
will convert from text to date format....
I am assuming that your two fields (afterDate and beforeDate) are in Date format.
Your example would be:
SELECT *
From aTable
WHERE afterDate >= CAST( '08/07/2013' AS DATE )
AND beforeDate <= CAST( '08/08/2013' AS DATE )
Also, usually (but not always) a date range is on the SAME field. As I said, that is not true all the time and you may have a good reason for that.
The best approach is to use the ANSI standard which does not require any conversion: yyyymmdd (you can also include hh:mm:ss) for instance:
DateField1 >= "20150101" and DateFile1 <= "20150102"
You should decide which Input-Strings the user is going to use as parameter and then convert them and concatenate them like you want, unless it is Datetime it is not important which initial format it had, you can use it in a between-condition.
E. g. the user is from Europe and uses "DD.MM.YY" and "hh:mm" as an input parameter, I would convert and concatenate like this:
WHERE dateCol between convert(DATETIME,
convert(char(11),
convert(DATETIME, '01.06.14', 4), 16) || ' ' || '00:00', 8)
AND convert(DATETIME,
convert(char(11),
convert(DATETIME, '01.07.14', 4), 16) || ' ' || '16:00', 8)

Simple DateTime sql query

How do I query DateTime database field within a certain range?
I am using SQL SERVER 2005
Error code below
SELECT *
FROM TABLENAME
WHERE DateTime >= 12/04/2011 12:00:00 AM
AND DateTime <= 25/05/2011 3:53:04 AM
Note that I need to get rows within a certain time range. Example, 10 mins time range.
Currently SQL return with Incorrect syntax near '12'."
You missed single quote sign:
SELECT *
FROM TABLENAME
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'
Also, it is recommended to use ISO8601 format YYYY-MM-DDThh:mm:ss.nnn[ Z ], as this one will not depend on your server's local culture.
SELECT *
FROM TABLENAME
WHERE
DateTime >= '2011-04-12T00:00:00.000' AND
DateTime <= '2011-05-25T03:53:04.000'
You need quotes around the string you're trying to pass off as a date, and you can also use BETWEEN here:
SELECT *
FROM TABLENAME
WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'
See answer to the following question for examples on how to explicitly convert strings to dates while specifying the format:
Sql Server string to date conversion
This has worked for me in both SQL Server 2005 and 2008:
SELECT * from TABLE
WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'}
AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}
You can execute below code
SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14
SELECT *
FROM TABLENAME
WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
AND [DateTime] <= '2011-05-25 3:35:04 AM'
If this doesn't work, please script out your table and post it here. this will help us get you the correct answer quickly.
select getdate()
O/P
----
2011-05-25 17:29:44.763
select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM'
O/P
---
22/06/1432 5:29:44:763PM
Others have already said that date literals in SQL Server require being surrounded with single quotes, but I wanted to add that you can solve your month/day mixup problem two ways (that is, the problem where 25 is seen as the month and 5 the day) :
Use an explicit Convert(datetime, 'datevalue', style) where style is one of the numeric style codes, see Cast and Convert. The style parameter isn't just for converting dates to strings but also for determining how strings are parsed to dates.
Use a region-independent format for dates stored as strings. The one I use is 'yyyymmdd hh:mm:ss', or consider ISO format, yyyy-mm-ddThh:mi:ss.mmm. Based on experimentation, there are NO other language-invariant format string. (Though I think you can include time zone at the end, see the above link).
if you have a type of datetime and you want to check between dates only ,,,use cast to select between two dates ....
example...
... where cast( Datetime as date) >= cast( Datetime as date) AND cast( Datetime as date) <= cast( Datetime as date)