mysql 存儲過程如何定義datetime類型的變量或者該怎么處理
創新互聯是一家集網站建設,東阿企業網站建設,東阿品牌網站建設,網站定制,東阿網站建設報價,網絡營銷,網絡優化,東阿網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。
DELIMITER $$
DROP PROCEDURE IF EXISTS `datatime`$$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `iccsdb`.`datatime`()
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/
BEGIN
DECLARE dattime DATETIME DEFAULT '2013-10-10';
SELECT dattime FROM DUAL;
END$$
DELIMITER ;
跟字符串一樣的處理,當然還有一些 特殊的 時間處理函數
您好,如下是MySql中與時間相關的字段類型。
datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date 3 bytes YYYY-MM-DD 1000-01-01 ~ 9999-12-31
year 1 bytes YYYY 1901 ~ 2155
我個人會經常使用datetime
以每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 定義
mysql(5.5)所支持的日期時間類型有:DATETIME、?TIMESTAMP、DATE、TIME、YEAR。
1.DATETIME 用于表示 年月日 時分秒,是 DATE 和 TIME 的組合,并且記錄的年份比較長久。如果實際應用中有這樣的需求,就可以使用 DATETIME 類型。
2.TIMESTAMP
TIMESTAMP 用于表示 年月日 時分秒,但是記錄的年份比較短暫。
TIMESTAMP 和時區相關,更能反映當前時間。當插入日期時,會先轉換為本地時區后再存放;當查詢日期時,會將日期轉換為本地時區后再顯示。所以不同時區的人看到的同一時間是? 不一樣的。
表中的第一個?TIMESTAMP?列自動設置為系統時間(CURRENT_TIMESTAMP)。當插入或更新一行,但沒有明確給 TIMESTAMP 列賦值,也會自動設置為當前系統時間。如果表中有第二個 TIMESTAMP 列,則默認值設置為0000-00-00 00:00:00。
TIMESTAMP 的屬性受 Mysql 版本和服務器 SQLMode 的影響較大。
如果記錄的日期需要讓不同時區的人使用,最好使用 TIMESTAMP。
3.DATE
DATE 用于表示 年月日,如果實際應用值需要保存 年月日 就可以使用 DATE。
4.TIME
TIME 用于表示 時分秒,如果實際應用值需要保存 時分秒 就可以使用 TIME。
5.YEAR
YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默認是4位。如果實際應用只保存年份,那么用 1 bytes 保存 YEAR 類型完全可以。不但能夠節約存儲空間,還能提高表的操作效率。
資料拓展:
每種日期時間類型都有一個有效值范圍,如果超出這個范圍,在默認的SQLMode下會報錯,并以零值存儲。
插入或更新時,日期時間類型允許“不嚴格”語法,以DATETIME為例(其他日期時間類型雷同):
YYYY-MM-DD HH:MM:SS?或?YY-MM-DD HH:MM:SS 格式的字符串。任何符號都可以用作日期部分或時間部分的間隔符。例如:“14-06-18 14:54:10”、“14*06*18 14.54.10”、“14+06+18 14=54=10”是等價的。對于包含日期時間的字符串值,如果月、日、時、分、秒的值小于10,不需要指定兩位數。例如:“2014-2-3 2:3:6”、“2014-02-03 02:03:06”是等價的。
YYYYMMDDHHMMSS 或?YYMMDDHHMMSS 格式的字符串。如果字符串對于日期時間類型是合法的就可以解釋為日期時間類型。例如:“20140618145410” 和 “140618145410”將被解釋為 “2014-06-18 14:54:10” ,但是?“20140618145480” 是不合法的(秒數不合法),將被解釋為 “0000-00-00 00:00:00”。
YYYYMMDDHHMMSS 或?YYMMDDHHMMSS 格式的數字。如果該數字對日期時間類型是合法的就可以解釋為日期時間類型。例如:“20140618145410” 和 “140618145410” 將被解釋為 “2014-06-18 14:54:10” 。數值的長度應為6、8、12、14。如果數值長度是 8 或 14 位長,則假定為 YYYYMMDD 或?YYYYMMDDHHMMSS?格式。如果數值為 6 或 12 位長,則假定為 YYMMDD 或?YYMMDDHHMMSS?格式。
解決方案一:
日期前面的符號換為逗號
日期可以用mysql的方法todate
解決方案二:
MySQL 插入數據 date 格式
mysql插入date類型的值
mysql插入date類型的值
解決方案三:
nsert into table (date) values ('to_date('2009-06-08 23:53:17','YYYY-DD-MM HH:MI:SS'),'
解決方案四:
數據庫中日期字段設置datetime類型 然后就可以插入對應字符串
拓展資料
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于?Oracle?旗下產品。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
新聞名稱:mysql怎么定義時間型,mysql定義時間類型
網頁鏈接:http://vcdvsql.cn/article22/hshscc.html
成都網站建設公司_創新互聯,為您提供品牌網站設計、外貿建站、微信小程序、服務器托管、網站建設、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯