How to get rows after a time of day using datetime column - mysql

I am running queries for a ticketing system. I want to extract all tickets created after 6:00PM or 18:00:00 in database/military time.
Could I use a DATEPART function or EXTRACT function?
Something like this may work:
SELECT *
FROM ticket
WHERE TIME IS AFTER 6PM
The issue is that the datetime format is as '2014-12-01 16:13:38' so I would need to specify for only the characters after the DATE section.

In MySQL, just use the hour() function:
SELECT *
FROM ticket
WHERE hour(time) >= 18;

Related

generate timezone specific date and time

My mysql query is as follows:
select * from orders
where orders has created_at field.
Now what i want is i want to convert created_at to 7 am of next day of created_at date . and the time created should be according to local timezone.
Is there a way to achieve it?
Note:: and orders table also has field timezone which has values like Australia/Sydney , Asia/Kolkata etc.
You need to go through the CONVERT_TZ function
// syntax
CONVERT_TZ(your_timestamp_column_name, 'db_timezone', 'your_desired_timezone_name')
// Example
SELECT CONVERT_TZ(`created_at`, 'UTC', `timezone`) as `my_date` FROM orders
Now when you have a date in your desired timezone, you can add hour and time that comes from a difference of next day 7AM and .my_date

MySQL - DATETIME greater than given time regardless of date

I have a table which stores time data in the DATETIME format. I would like to build a query to return just the values after a give time (for example 15:00 - i.e. 3pm) for each day, not just for a given date.
Is this possible in MySQL. Does anyone have any examples?
You can use the hour() function:
where hour(col) >= 15
You can do this:
WHERE TIME(column) >= '15:00:00'
or even
WHERE TIME(a.column) >= TIME(b.cutoff)

Query Time range between Dates using DATETIME mysql

I have a database table that has fields as such :
TIME(Datetime) Update_ID
2013-11-25 05:00:14 XC3
2013-11-25 06:00:13 XC4
2013-11-25 06:00:19 XC5
2013-12-25 23:00:14 XC6
2013-12-25 24:00:00 XC7
So assuming i want to find a trend on the updates to know which period of the day has the a particular number of updates, what i initially think of is doing something like this :
SELECT COUNT(TIME) FROM table WHERE TIME between '06:00:00' and '12:00:00'
But this doesn't work because i think since the date is not added with the time, a default value for date is added(some date around 1970). If, i add the beginning and enddate in my query, i am afraid it won't give me the results i need.
Use
WHERE HOUR(TIME)...GROUP BY DAY(TIME)
in case you have more than 1 day
You are correct, the problem is that when you do not specify the date, a default one is added.
You can use the EXTRACT function to extract the time from a date, like this:
SELECT COUNT(*)
FROM mytable
WHERE EXTRACT(HOUR_SECOND from TIME) between 60000 and 120000
Note that the time portion in the condition is specified in a different format - i.e. as numbers, without colons and quotes.
Demo on SqlFiddle.

Getting years 2014+ from csv import to mysql

I used phpmyadmin for the csv import to mysql. The data contains date of birth (DOB). Some of the dates go over the current date. Ex: 2035-06-15. I am trying to find a way to fix it. Ex: 2035 to 1935. One approach is to UPDATE query all dates over the year 2013/2014. Is there a way I can make that a statement? I read around and heard that using wildcards for date types is a no-no.
Instead of a wildcard, you can use the YEAR function to get the year:
YEAR(DOB)
Then you can use the DATE_SUB function to subtract the 100 years:
DATE_SUB(DOB, INTERVAL 100 YEAR)
The whole query would look something like this:
UPDATE myTable
SET DOB = DATE_SUB(DOB, INTERVAL 100 YEAR)
WHERE YEAR(DOB) > 2013

SQL extra only the day instead of entire date

I have a field in my table called created_date. The date format is 2010-02-28. I just wondering is it possible to do a mysql statement, only return the day instead of the entire date. eg. 28
SELECT
day(created_date)
FROM
table
This above query throw me error, is there a way i can do similar stuff?
cheers
Use MySQL built-in function called DAYOFMONTH
mysql> SELECT DAYOFMONTH('2007-02-03');
-> 3
DAYOFMONTH()
From Docs,
Returns the day of the month for date, in the range 1 to 31, or 0 for
dates such as '0000-00-00' or '2008-00-00' that have a zero day part.
MySql EXTRACT function extracts day, month or year from a given date.
select extract(day from created_date) as created_day from table
you can fetch the whole date in your format and display only the required field that is date by using this
date("j", strtotime(date('Y-m-d')) );