Blog coding and discussion of coding about JavaScript, PHP, CGI, general web building etc.

Tuesday, January 31, 2017

Query comparing dates in SQL

Query comparing dates in SQL


I have a table with dates that all happened in the month November. I wrote this query

select id,numbers_from,created_date,amount_numbers,SMS_text   from Test_Table  where   created_date <= '2013-04-12'  

This query should return everything that happened in month 11 (November) because it happened before the date '2013-04-12' (in December)

But it's only returning available dates that happened in days lesser than 04 (2013-04-12)

Could it be that it's only comparing the day part? and not the whole date?

How to fix this?

Created_date is of type date

Date format is by default yyyy-dd-MM

Answer by Panagiotis Kanavos for Query comparing dates in SQL


Instead of '2013-04-12' whose meaning depends on the local culture, use '20130412' which is recognized as the culture invariant format.

If you want to compare with December 4th, you should write '20131204'. If you want to compare with April 12th, you should write '20130412'.

The article Write International Transact-SQL Statements from SQL Server's documentation explains how to write statements that are culture invariant:

Applications that use other APIs, or Transact-SQL scripts, stored procedures, and triggers, should use the unseparated numeric strings. For example, yyyymmdd as 19980924.

EDIT

Since you are using ADO, the best option is to parameterize the query and pass the date value as a date parameter. This way you avoid the format issue entirely and gain the performance benefits of parameterized queries as well.

UPDATE

To use the the the ISO 8601 format in a literal, all elements must be specified. To quote from the ISO 8601 section of datetime's documentation

To use the ISO 8601 format, you must specify each element in the format. This also includes the T, the colons (:), and the period (.) that are shown in the format.

... the fraction of second component is optional. The time component is specified in the 24-hour format.

Answer by Bowie for Query comparing dates in SQL


Date format is yyyy-mm-dd. So the above query is looking for records older than 12Apr2013

Suggest you do a quick check by setting the date string to '2013-04-30', if no sql error, date format is confirmed to yyyy-mm-dd.

Answer by Nithesh for Query comparing dates in SQL


Try like this

select id,numbers_from,created_date,amount_numbers,SMS_text   from Test_Table  where   created_date <= '2013-12-04'  

Answer by Naresh Pansuriya for Query comparing dates in SQL


please try with below query

select id,numbers_from,created_date,amount_numbers,SMS_text   from Test_Table  where   convert(datetime, convert(varchar(10), created_date, 102))  <= convert(datetime,'2013-04-12')  

Answer by Kuzgun for Query comparing dates in SQL


You put <= and it will catch the given date too. You can replace it with < only.

Answer by Bimzee for Query comparing dates in SQL


If You are comparing only with the date vale, then converting it to date (not datetime) will work

select id,numbers_from,created_date,amount_numbers,SMS_text    from Test_Table   where    created_date <= convert(date,'2013-04-12',102)  

This conversion is also applicable during using GetDate() function

Answer by Ren Marín for Query comparing dates in SQL


Try to use "#" before and after of the date and be sure of your system date format. maybe "YYYYMMDD O YYYY-MM-DD O MM-DD-YYYY O USING '/ O \' "

Ex:

 select id,numbers_from,created_date,amount_numbers,SMS_text    from Test_Table   where    created_date <= #2013-04-12#  


Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72

0 comments:

Post a Comment

Popular Posts

Powered by Blogger.