问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql分别获取已有数据date中的年月日

发布网友 发布时间:2022-04-21 19:10

我来回答

6个回答

热心网友 时间:2022-04-08 02:29

以每24小时作为一份时间(而非自然日),根据用户的配置有两种工作模式:带状模式中,用户仅定义开始日期时,从开始日期(含)开始,每份时间1个分片地无限增加下去;环状模式中,用户定义了开始日期和结束日期时,以结束日期(含)和开始日期(含)之间的时间份数作为分片总数(分片数量固定),以类似取模的方式路由到这些分片里。

1. DBLE 启动时,读取用户在 rule.xml 配置的 sBeginDate 来确定起始时间
2. 读取用户在 rule.xml 配置的 sPartionDay 来确定每个 MySQL 分片承载多少天内的数据
3. 读取用户在 rule.xml 配置的 dateFormat 来确定分片索引的日期格式
4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的时间类型
5. 然后求分片索引值与起始时间的差,除以 MySQL 分片承载的天数,确定所属分片

1. DBLE 启动时,读取用户在 rule.xml 配置的起始时间 sBeginDate、终止时间 sEndDate 和每个 MySQL 分片承载多少天数据 sPartionDay
2. 根据用户设置,建立起以 sBeginDate 开始,每 sPartionDay 天一个分片,直到 sEndDate 为止的一个环,把分片串联串联起来
3. 读取用户在 rule.xml 配置的 defaultNode
4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的日期类型
5. 然后求分片索引值与起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承载的天数为模数,对分片索引值求模得到所属分片;如果分片索引值早于 sBeginDate,就会被放到 defaultNode 分片上

与MyCat的类似分片算法对比

中间件
DBLE
MyCat

分片算法种类 date 分区算法 按日期(天)分片
两种中间件的取模范围分片算法使用上无差别

开发注意点
【分片索引】1. 必须是字符串,而且 java.text.SimpleDateFormat 能基于用户指定的 dateFormat 来转换成 java.util.Date
【分片索引】2. 提供带状模式和环状模式两种模式
【分片索引】3. 带状模式以 sBeginDate(含)起,以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,理论上分片数量可以无限增长,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)
【分片索引】4. 环状模式以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,以 sBeginDate(含)到 sEndDate(含)的时间长度除以单个分片长度得到恒定的分片数量,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)
【分片索引】5. 无论哪种模式,分片索引字段的格式化字符串 dateFormat 由用户指定
【分片索引】6. 无论哪种模式,划分不是以日历时间为准,无法对应自然月和自然年,且会受闰秒问题影响

运维注意点
【扩容】1. 带状模式中,随着 sBeginDate 之后的数据出现,分片数量的增加无需再平衡
【扩容】2. 带状模式没有自动增添分片的能力,需要运维手工提前增加分片;如果路由策略计算出的分片并不存在时,会导致失败
【扩容】3. 环状模式中,如果新旧 [sBeginDate,sEndDate] 之间有重叠,需要进行部分数据迁移;如果新旧 [sBeginDate,sEndDate] 之间没有重叠,需要数据再平衡

配置注意点
【配置项】1. 在 rule.xml 中,可配置项为 <propertyname="sBeginDate"> 、 <propertyname="sPartionDay"> 、 <propertyname="dateFormat"> 、 <propertyname="sEndDate"> 和 <propertyname="defaultNode">
【配置项】2.在 rule.xml 中配置 <propertyname="dateFormat">,符合 java.text.SimpleDateFormat 规范的字符串,用于告知 DBLE 如何解析sBeginDate和sEndDate

【配置项】3.在 rule.xml 中配置 <propertyname="sBeginDate">,必须是符合 dateFormat 的日期字符串

【配置项】4.在 rule.xml 中配置 <propertyname="sEndDate">,必须是符合 dateFormat 的日期字符串;配置了该项使用的是环状模式,若没有配置该项则使用的是带状模式

【配置项】5.在 rule.xml 中配置 <propertyname="sPartionDay">,非负整数,该分片策略以 86400000 毫秒(24 小时整)作为一份,而 sPartionDay 告诉 DBLE 把每多少份放在同一个分片

【配置项】6.在 rule.xml 中配置 <propertyname="defaultNode"> 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义

热心网友 时间:2022-04-08 03:47

mysql> SELECT 'NOW' DisplayMode, NOW() B
-> UNION ALL
-> SELECT 'Second' DisplayMode, Second(NOW()) B
-> UNION ALL
-> SELECT 'Minute' DisplayMode, MINUTE(NOW()) B
-> UNION ALL
-> SELECT 'Hour' DisplayMode, Hour(NOW()) B
-> UNION ALL
-> SELECT 'Day' DisplayMode, DAY(NOW()) B
-> UNION ALL
-> SELECT 'Week' DisplayMode, Week(NOW()) B
-> UNION ALL
-> SELECT 'Month' DisplayMode, Month(NOW()) B
-> UNION ALL
-> SELECT 'Year' DisplayMode, Year(NOW()) B;
+-------------+---------------------+
| DisplayMode | B |
+-------------+---------------------+
| NOW | 2010-10-22 20:43:09 |
| Second | 9 |
| Minute | 43 |
| Hour | 20 |
| Day | 22 |
| Week | 42 |
| Month | 10 |
| Year | 2010 |
+-------------+---------------------+
8 rows in set (0.00 sec)

上面这个 SQL 是 2010-10-22 20:43:09 执行的, 用于测试 获取一个日期里面的各个组成部分的例子。年月日时分秒都有。

热心网友 时间:2022-04-08 05:21

把要获取的日期转成字符型的,然后按位接取就得到了,这是一种方法,也是最省事的方法.

热心网友 时间:2022-04-08 07:13

分别用YEAR,MONTH,DAY函数,例如
mysql> select * from test;
+------------+
| DATE |
+------------+
| 2011-01-19 |
| 2011-01-19 |
| 2010-06-01 |
| 2010-06-10 |
| 2010-07-10 |
+------------+

mysql> select YEAR(DATE) from test;
+------------+
| YEAR(DATE) |
+------------+
| 2011 |
| 2011 |
| 2010 |
| 2010 |
| 2010 |
+------------+
月:
mysql> select month(DATE) from test ;
+-------------+
| month(DATE) |
+-------------+
| 1 |
| 1 |
| 6 |
| 6 |
| 7 |
+-------------+
日:
mysql> select day(DATE) from test;
+-----------+
| day(DATE) |
+-----------+
| 19 |
| 19 |
| 1 |
| 10 |
| 10 |
+-----------+

热心网友 时间:2022-04-08 09:21

YEAR(serial_number) = YEAR YEAR("2001/9/10") =2001
MONTH(serial_number) = MONTH MONTH ("2001/9/10") = 9
DAY(serial_number) = DAY DAY("2001/9/10") = 10

热心网友 时间:2022-04-08 11:45

select year(Date),month(Date),day(Date) from test;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
股骨头坏死手术方式 退订金没有收据了怎么办 泸州台湾通行证外地人补办时间 运动手表安全吗(运动手表对身体有害吗) 扫地机器人随机式和规划式的区别 茶怎么喝才正确 如何查找电线接头 炸鱼片的做法 如何制作炸鱼片 福建泉州哪里有织带厂在招工 Apple 苹果 MacBook Air 2014款-适用对象 网站在局域网内怎样发布的问题 mysql 怎么查询一年的数据 如何把内网的服务应用发布到外网 如果内网网站发布到外网具体怎么做? 怎样把自己电脑做的wordpress网站发布在单位内网上 如何在公司局域网内发布一个网站。 在内网里发布自己做的网页 在局域网中怎样发布网站 局域网内发布消息 内网中的内网怎么把网站发布出去??? 如何把内网网站发布到外网 如何在局域网发布网页? 如何将内网网站发布到外网 如何把内网服务发布到公网 局域网如何发布网站? 如何发布局域网中的网站? 如何发布内网网站到外网 通过内网网站发布通知时能否插入附件 如何使用内网服务器发布网站? 在单位内网发布了单位内部不真实消息算不算谣言 php获取MySQL的最新几行数据 mysql获取第n条记录 MySql获取同期对比数据 mysql中怎么获取当前日期的数据 MYSQL获取数据库当日数据 mysql如何获取昨天的数据 香皂花没味道了还能用吗? MySQL数据查询获取数据 mysql如何取得指定日期内的数据 如何查看 mysql 表中最近更新的记录 MySQL 语句获取 节目列表中最新的单期数据 mysql怎样高效率随机获取n条数据 mysql查询怎么随机获取数据 mysql如何获取到每天的某一个特定时间段的数据 mysql 如何获取数据表中离当前日期最近的数据 湖南人怎么样 有什么样的性格特征 如何看待湖南人讨厌湖南卫视这件事呢? 为什么湖南人长得都那么难看? 电视频道这么多,但是有很多不是湖南人都会看芒果... 湖南人为什么把槟榔看成是吉祥果?