我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。
我当前的查询如下所示:
SELECT * FROM tbl_item_trans
WHERE (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)
但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。
我怎么解决这个问题?如果我只使用专栏的DATE一部分,那就更好了datetime。
在@start与@end变量使用date的数据类型,例如“2017年9月16日”。
我想比较结果集中的日期
例子:
SELECT * FROM tbl WHERE foo=bar
Run Code Online (Sandbox Code Playgroud)
输出
id, datetime, name
1, 2014-01-01 18:13:45, test 1
2, 2014-01-01 19:01:32, test 2
3, 2014-01-01 20:34:44, test 3
4, 2014-01-03 04:45:22, test 4
Run Code Online (Sandbox Code Playgroud)
我希望能够区分每条记录之间的时间差异是小于还是大于前一条记录的 24 小时。
例子:
1, 2014-01-01 18:13:45, test 1 <-- first record since the previous record
2, 2014-01-01 19:01:32, test 2 <-- second record was less than 24 hours since the previous record
3, 2014-01-01 20:34:44, test 3 <-- third record was less than 24 hours since the …Run Code Online (Sandbox Code Playgroud) 我查询此 SQL 查询:
SELECT * FROM [DB].[dbo].[Table]
WHERE [DATE] BETWEEN '01-01-2016' AND '31-03-2016'
AND ([TIME] >= '00:00:00' OR [DATE] > '01-01-2016')
AND ([TIME] <= '00:00:00' OR [DATE] < '31-03-2016');
Run Code Online (Sandbox Code Playgroud)
但在 SQL Studio 中,结果为另一个日期和时间。
[DATE] = VARCHAR(10) (DD-MM-YYYY)
[TIME] = VARCHAR(10) (HH:MM:SS) 24h
Run Code Online (Sandbox Code Playgroud)
怎么修 ?
运行 MySQL 8.0.16,据我所知,设置保留为默认值。
我有一张桌子,我们称之为 the_table,有列
id: bigint 主键 auto_increment
the_time:日期时间
我有一个记录,the_time 为 2019-12-19 00:00:00。
当我运行
SELECT id, the_time
FROM the_table
WHERE the_time BETWEEN '2019-12-19' AND '2019-12-19';
SELECT id, the_time
FROM the_table
WHERE COALESCE(the_time, DATE('9999-1-1')) BETWEEN '2019-12-19' AND '2019-12-19';
Run Code Online (Sandbox Code Playgroud)
我得到那个记录。然而,随着
SELECT id, the_time
FROM the_table
WHERE COALESCE(the_time, '9999-1-1') BETWEEN '2019-12-19' AND '2019-12-19';
Run Code Online (Sandbox Code Playgroud)
我没有,虽然将其更改为
SELECT id, the_time
FROM the_table
WHERE COALESCE(the_time, '9999-1-1') BETWEEN '2019-12-18' AND '2019-12-20';
Run Code Online (Sandbox Code Playgroud)
我突然又做了。为什么 MySQL 会这样?为什么额外的 DATE() 会有所作为?我原以为日期和字符串格式之间的转换是双射的,不应该影响计算,但似乎确实如此。为什么只是合并会对是否找到非空记录产生影响?
例如,我想将下面查询中的公历日期转换为波斯日期
select convert(GregorianDate ,persianDate) date
from TOrder
where orderid=?
result:
date:
2021-01-25 ----->convert to ----> 1399/11/06
Run Code Online (Sandbox Code Playgroud) 我正在我的应用程序中处理时间戳/日期时间。我正在使用 postgres 数据库。在 postgres 中获取当前毫秒(例如 1412706599000)的方法是什么?
这是我的ticks(时钟)表:
_id_
#employee_id
created_at
Run Code Online (Sandbox Code Playgroud)
该表为每个员工存储他们勾选的时间戳。有时他们中的一些人一天打好几次,有些人不上班时只打一次或根本不打。
我有一个查询,可以让我确切地知道员工在过去 7 天内不上班的次数,但我希望结果中包含他们不上班的天数。这意味着,每个员工在过去 7 天内工作少于 6 天,以及缺少哪些日期。我不知道。
以下是我如何查询过去 7 天内谁缺席了不止一次,以及缺席了多少次:
SELECT `id`, `employee_id`, COUNT(`date`)-6 missing
FROM (
SELECT `id`, `employee_id`, DATE(created_at) date
FROM `ticks`
WHERE `created_at` >= '2017-09-16' AND `created_at` < '2017-09-23'
GROUP BY `employee_id`, `date`
) ticks
GROUP BY `employee_id`
HAVING missing < 0
Run Code Online (Sandbox Code Playgroud)
基于那个或另一个查询,我想知道该范围内缺少哪个日期(顺便说一下,我可以从另一个查询中获取范围,每天至少有 1 个刻度,即使是在星期日)。
这是一个带有示例数据集的sqlfiddle。我期待的结果是:
+-------------+--------------+
| employee_id | date_missing |
+-------------+--------------+
| 2 | 2017-09-18 |
| 2 | 2017-09-19 |
| 3 | …Run Code Online (Sandbox Code Playgroud)