mysql中生日可用類型:1、DATE類型,可表示的日期格式為“YYYY-MM-DD”,在儲存時需要3個位元組;2、DATETIME類型,可表示的日期格式為“YYYY-MM-DD HH:MM:SS”,儲存時需要8個位元組;3、TIMESTAMP類型,可表示的日期格式為“YYYY-MM-DD HH:MM:SS”,儲存時需要4個位元組。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
MySQL中適合生日的日期與時間類型
類型名稱 | #日期格式 | 日期範圍 | |
---|---|---|---|
DATE | YYYY-MM-DD | 1000- 01-01 ~ 9999-12-3 | |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC |
DATE 類型
DATE 類型用於只需要日期值時,沒有時間部分,在儲存時需要 3 個位元組。日期格式為 'YYYY-MM-DD',其中 YYYY 表示年,MM 表示月,DD 表示日。
在賦值 DATE 類型的欄位時,可以使用字串類型或數字類型的資料插入,只要符合 DATE 的日期格式即可。如下所示:
以'YYYY-MM-DD' 或'YYYYMMDD' 字元中格式表示的日期,取值範圍為'1000-01-01'~'9999- 12-3'。例如,輸入 '2015-12-31' 或 '20151231',插入資料庫的日期為2015-12-31。
以 'YY-MM-DD' 或 'YYMMDD' 字串格式表示日期,在這裡YY表示兩位的年值。 MySQL 解釋兩位年值的規則:'00~69' 範圍的年值轉換為 '2000~2069','70~99' 範圍的年值轉換為 '1970~1999'。例如,輸入 '15-12-31',插入資料庫的日期為 2015-12-31;輸入 '991231',插入資料庫的日期為 1999-12-31。
以 YYMMDD 數字格式表示的日期,與前面相似,00~69 範圍的年值轉換為 2000~2069,80~99 範圍的年值轉換為 1980~1999。例如,輸入 151231,插入資料庫的日期為 2015-12-31,輸入 991231,插入資料庫的日期為 1999-12-31。
使用 CURRENT_DATE 或 NOW(),插入目前系統日期。
提示:MySQL 允許「不嚴格」語法:任何標點符號都可以用作日期部分之間的間隔符號。例如,'98-11-31'、'98.11.31'、'98/11/31'和'98@11@31' 是等價的,這些值也可以正確地插入資料庫。
DATETIME 類型
DATETIME 類型用於需要同時包含日期和時間資訊的值,在儲存時需要 8 個位元組。日期格式為 'YYYY-MM-DD HH:MM:SS',其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小時,MM 表示分鐘,SS 表示秒。
在給DATETIME 類型的欄位賦值時,可以使用字串類型或數字類型的資料插入,只要符合DATETIME 的日期格式即可,如下所示:
以'YYYY-MM-DD HH:MM:SS' 或'YYYYMMDDHHMMSS' 字串格式表示的日期,取值範圍為'1000-01-01 00:00:00'~'9999-12-3 23 :59:59'。例如,輸入 '2014-12-31 05:05:05' 或 '20141231050505’,插入資料庫的 DATETIME 值皆為 2014-12-31 05:05:05。
以 'YY-MM-DD HH:MM:SS' 或 'YYMMDDHHMMSS' 字串格式表示的日期,在這裡 YY 表示兩位的年值。與前面相同,'00~79' 範圍的年值轉換為 '2000~2079','80~99' 範圍的年值轉換為 '1980~1999'。例如,輸入'14-12-31 05:05:05',插入資料庫的DATETIME 為2014-12-31 05:05:05;輸入141231050505,插入資料庫的DATETIME 為2014-12-31 05:05:05 。
以 YYYYMMDDHHMMSS 或 YYMMDDHHMMSS 數字格式表示的日期和時間。例如,輸入 20141231050505,插入資料庫的 DATETIME 為 2014-12-31 05:05:05;輸入 140505050505,插入資料庫的 DATETIME 為 2014-12-31 05:05:插入資料庫的 DATETIME 為 2014-12-31 05:05:05。
提示:MySQL 允許「不嚴格」語法:任何標點符號都可用作日期部分或時間部分之間的間隔符號。例如,'98-12-31 11:30:45'、'98.12.31 11 30 35'、'98/12/31 11*30*45' 和'98@12@31 11^30^45' 是等價的,這些值都可以正確地插入資料庫。
TIMESTAMP 類型
TIMESTAMP 的顯示格式與DATETIME 相同,顯示寬度固定在19 個字符,日期格式為YYYY-MM-DD HH:MM :SS,儲存時需要4 個位元組。但 TIMESTAMP 列的值範圍小於 DATETIME 的值範圍,為 '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC。在插入資料時,要保證在合法的取值範圍內。
提示:協調世界時(英:Coordinated Universal Time,法:Temps Universel Coordonné)又稱為世界統一時間、世界標準時間、國際協調時間。英文(CUT)和法文(TUC)的縮寫不同,作為妥協,簡稱 UTC。
TIMESTAMP 與DATETIME 除了儲存位元組和支援的範圍不同外,還有一個最大的差異是:
DATETIME 在儲存日期資料時,按實際輸入的格式存儲,即輸入什麼就存儲什麼,與時區無關;
而TIMESTAMP 值的存儲是以UTC(世界標準時間)格式保存的,存儲時對目前時區進行轉換,檢索時轉換回目前時區。即查詢時,根據目前時區的不同,顯示的時間值是不同的。
提示:如果為 DATETIME 或 TIMESTAMP 物件指派 DATE 值,則結果值的時間部分設定為 '00:00:00',因此 DATE 值未包含時間資訊。如果為一個 DATE 物件指派一個 DATETIME 或 TIMESTAMP 值,結果值的時間部分會被刪除,因此DATE 值未包含時間資訊。
時間與日期函數
#系統時間函數 now(), current_timestamp, sysdate ()
這三個函數都能傳回系統時間,看看它們的區別,同時存取這三個函數得到的結果一樣,但是讓其等待幾秒之後,結果就不同了。
上圖發現sysdate()回傳的時間與now(), current_timestamp不同,慢了2秒,原因如下:
current_timestamp 是now的同義詞,兩者實際上是一樣的;
sysdate() 函數傳回的是執行到目前函數時的時間,而now()傳回的是執行sql語句時的時間;
時間加減函數
① date_add 與date_sub
date_add(date, interval expr unit) 與 date_sub( date, interval expr unit) 分別表示增加與減少。
select date_add('2017-12-18 22:51:00', interval 1 second), date_add('2017-12-18 22:51:00', interval 1 minute), date_add('2017-12-18 22:51:00', interval 1 hour), date_add('2017-12-18 22:51:00', interval 1 day), date_add('2017-12-18 22:51:00', interval 1 month), date_add('2017-12-18 22:51:00', interval 1 year);
遇到閏月時,date_add怎麼處理呢,MySQL如果是閏月回傳的日期是2月29,如果不是閏月回傳的是2月28。
select date_add('2016-02-29 22:51:00', interval -1 year), date_add('2016-02-29 22:51:00', interval 4 year);
2015-02-28 22:51:002020-02-29 22:51:00
② datediff 與 timediff
#datediff(date1,date2):兩個日期相減 date1 - date2,傳回天數。 select datediff('2016-02-29 22:51:00','2016-03-29 22:51:00');
#timediff(time1,time2):兩個日期相減time1 - time2,傳回time 差值(格式為:838:59:59)。 select timediff('2016-02-29 22:51:00','2016-01-29 22:51:00');
注意:timediff(time1,time2)函數的兩個參數類型必須相同。
③ timestamp 增,減,轉換函數
#timestamp(date)
-- date to timestamp#timestamp(date, time)
-- date timetimestampadd(unit,interval,datetime_expr)
-- 類似date_add,對時間以單位增加,減少
select timestampadd(second, 60, '2017-12-18 00:00:00'); select timestampadd(minute, 60, '2017-12-18 00:00:00'); select timestampadd(hour, 60, '2017-12-18 00:00:00');
timestampdiff(unit,datetime_expr1,datetime_expr2)
--計算兩個時間的差,可以計算秒,分,時,天,月,年,週
select timestampdiff(second, '2017-12-18 00:00:00','2017-12-18 12:00:00'); select timestampdiff(hour, '2017-11-18 00:00:00','2017-12-18 12:00:00'); select timestampdiff(day, '2017-10-17 00:00:00','2017-11-18 23:00:00');
④ date_format 函數
date_format 函數主要用途是格式化日期
select date_format(now(),'%Y%m%d'), date_format(now(),'%Y-%m-%d'), date_format(now(),'%Y/%m/%d'), date_format(now(),'%m/%d/%Y');
注意:查詢資料時如果對某個日期欄位使用這個函數,則最佳化器不會使用欄位的索引,也不能透過索引來查詢數據,因此查詢效率會很低,如下列查詢語句,如果欄位birth_date有索引,則該索引因為使用了date_format函數失效:
select * from employees where date_format(birth_date,'%Y-%m-%d') = '1961-08-03';
#日期的經典程式設計問題
根據某個使用者的出生日期與當前日期,計算他最近的生日(包括已經過去的和將來的)
-- 上一年,当年,下一年生日与当前时间差最小的年就是用户最近的生日 select emp_no,first_name,last_name,birth_date,today,if(last_diff<=cur_diff and last_diff<=next_diff, last,if(cur_diff from ( -- 计算当前时间与上一年,当年,下一年生日的时间差 select emp_no,first_name,last_name,birth_date,datediff(today,last) as last_diff,abs(datediff(today,cur)) as cur_diff,abs(datediff(today,next)) as next_diff, last,cur,next,today from ( -- 用户最近的生日可能分布在前一年,当年,下一年。根据年度差year_diff计算上一年,当年,下一年用户的生日 select emp_no,first_name,last_name,birth_date, DATE_ADD(birth_date,INTERVAL year_diff year) as cur, DATE_ADD(birth_date,INTERVAL year_diff+1 year) as next, DATE_ADD(birth_date,INTERVAL year_diff-1 year) as last, today from ( -- 获取当前事前与出生日期的年度差 year_diff select emp_no,first_name,last_name,birth_date,(year(NOW())-year(birth_date)) as year_diff, NOW() as today from employees ) a ) b ) c
【相關推薦:mysql視頻教程】
以上是mysql中生日用什麼類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

選擇PostgreSQL而非MySQL的場景包括:1)需要復雜查詢和高級SQL功能,2)要求嚴格的數據完整性和ACID遵從性,3)需要高級空間功能,4)處理大數據集時需要高性能。 PostgreSQL在這些方面表現出色,適合需要復雜數據處理和高數據完整性的項目。

MySQL數據庫的安全可以通過以下措施實現:1.用戶權限管理:通過CREATEUSER和GRANT命令嚴格控制訪問權限。 2.加密傳輸:配置SSL/TLS確保數據傳輸安全。 3.數據庫備份和恢復:使用mysqldump或mysqlpump定期備份數據。 4.高級安全策略:使用防火牆限制訪問,並啟用審計日誌記錄操作。 5.性能優化與最佳實踐:通過索引和查詢優化以及定期維護兼顧安全和性能。

如何有效監控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。 1.使用mysqladmin查看連接數。 2.用SHOWGLOBALSTATUS查看查詢數。 3.PMM提供詳細性能數據和圖形化界面。 4.MySQLEnterpriseMonitor提供豐富的監控功能和報警機制。

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显著差异,选择时需考虑项目规模和未来扩展性。

在需要高可用性、高級安全性和良好集成性的企業級應用場景下,應選擇SQLServer而不是MySQL。 1)SQLServer提供企業級功能,如高可用性和高級安全性。 2)它與微軟生態系統如VisualStudio和PowerBI緊密集成。 3)SQLServer在性能優化方面表現出色,支持內存優化表和列存儲索引。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境