首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我在MariaDB中使用日期包括毫秒精度的between条件得到了不同的结果

我在MariaDB中使用日期包括毫秒精度的between条件得到了不同的结果
EN

Stack Overflow用户
提问于 2020-11-04 00:46:11
回答 3查看 42关注 0票数 0

我得到了下面的Sales表,其中包含列productName Varchar(50)saleDate bigint(20)

假设它存储了100条记录。

示例:

代码语言:javascript
运行
复制
productName saleDate
----------- ------------
TV          1601555334694
Radio       1603585354888
...

saleDate列存储在时间戳号中,日期的精度为毫秒。然后,我运行以下查询来获得2020年10月的销售数量:

代码语言:javascript
运行
复制
-- This returns a result of 70
SELECT COUNT(*) 
FROM (
  SELECT productName, 
  DATE_FORMAT(SUBSTRING(DATE_ADD((FROM_UNIXTIME(SUBSTRING(saleDate, 1, 10)) -
  INTERVAL (10+5*60) MINUTE), INTERVAL SUBSTRING(saleDate, 11, 13) SECOND_MICROSECOND),1,23), '%Y-%m-%d 00:00:00') AS saleDate
  FROM Sales
) s
WHERE s.saleDate between '2020-10-01 00:00:00' and '2020-10-31 23:59:59.999'

-- This returns a result of 20
SELECT COUNT(*) 
FROM (
  SELECT productName, 
  DATE_FORMAT(SUBSTRING(DATE_ADD((FROM_UNIXTIME(SUBSTRING(saleDate, 1, 10)) -
  INTERVAL (10+5*60) MINUTE), INTERVAL SUBSTRING(saleDate, 11, 13) SECOND_MICROSECOND),1,23), '%Y-%m-%d 00:00:00') AS saleDate
  FROM Sales
) s
WHERE s.saleDate between '2020-10-01 00:00:00.000' and '2020-10-31 23:59:59.999'

在这两个查询中,我减去了5个小时的日期,但减少了10分钟。这是系统要求。

因此,当我用.000过滤开始日期时,结果会发生变化。70的结果不应该是一样的吗?

我使用的是Mariadb 10.2.13

EN

Stack Overflow用户

发布于 2020-11-04 01:34:07

问题是您的DATE_FORMAT()格式字符串不包括毫秒。因此,如果saleDate的值恰好是2020-10-01 00:00:00,它将不满足BETWEEN条件,因为2020-10-01 00:00:00在字典顺序上不高于2020-10-01 00:00:00.000

将毫秒添加到格式字符串'%Y-%m-%d 00:00:00.000'中,或从BETWEEN中使用的时间中删除毫秒。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64667039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档