MySQL 5第四次學科練習

2013-05-15_155548

這是第四次ㄚ琪自我練習的結果,測試50題,答對41題得82分,錯9題扣9分,總計得分73分,跟第二次一樣,且這三次的分數都差不多,看來要80分以上是一個很大的瓶頸。就讓我們繼續努力練習吧。

2013-05-15_155837

這是MySQL 5實力養成暨評量裡的4-34.『在MySQL中,時間日期資料型態支援「非嚴格型」語法,任何標點符號均可作為日期或時間的間隔符號,所以以下哪些是合法的日期輸入?』

答案:(A) 06-10-31 (B) 06@10@31 (C) 06.10.31 (D) 06@10.31

這一題會錯誤的原因,在於ㄚ琪覺得@不是標點符號,所以我們來檢查一下手冊的說明吧。

MySQL 5.7 Reference Manual :: 9 Language Structure :: 9.1 Literal Values :: 9.1.3 Date and Time Literals

MySQL 5.1参考手册 :: 11. 列类型::11.3. 日期和时间类型::11.3.1. DATETIME、DATE和TIMESTAMP类型

轉譯繁體如下:

DATETIME、DATE和TIMESTAMP類型是相關的。該節描述了它們的特徵,它們的相似點和不同點。

當您需要同時包含日期和時間訊息的值時則使用DATETIME類型。MySQL以’YYYY-MM-DD HH:MM:SS’格式檢索和顯示DATETIME值。支援的範圍為’1000-01-01 00:00:00’到’9999-12-31 23:59:59′。(「支援」資料表示儘管先前的值可能工作,但沒有保證)。

當您只需要日期值而不需要時間部分時應使用DATE類型。MySQL用’YYYY-MM-DD’格式檢索和顯示DATE值。支援的範圍是’1000-01-01’到’9999-12-31′

TIMESTAMP列類型的屬性不固定,取決於MySQL版本和伺服器運行的SQL模式。這些屬性將在本節後面描述。

可以使用任何常見格式指定DATETIME、DATE和TIMESTAMP值:

·         ‘YYYY-MM-DD HH:MM:SS’或’YY-MM-DD HH:MM:SS’格式的字串。允許「不嚴格」語法:任何標點符號都可以用做日期部分或時間部分之間的間割符號。例如,’98-12-31 11:30:45’、’98.12.31 11+30+45’、’98/12/31 11*30*45’和’98@12@31 11^30^45’是等價的。

·         ‘YYYY-MM-DD’或’YY-MM-DD’格式的字串。這裡也允許使用「不嚴格的」語法。例如,’98-12-31’、’98.12.31’、’98/12/31’和’98@12@31’是等價的。

·         ‘YYYYMMDDHHMMSS’或’YYMMDDHHMMSS’格式的沒有間割符的字串,假定字串對於日期類型是有意義的。例如,’19970523091528’和’970523091528’被解釋為’1997-05-23 09:15:28’,但’971122129015’是不合法的(它有一個沒有意義的分鐘部分),將變為’0000-00-00 00:00:00’。

·         ‘YYYYMMDD’或’YYMMDD’格式的沒有間割符的字串,假定字串對於日期類型是有意義的。例如,’19970523’和’970523’被解釋為 ‘1997-05-23’,但’971332’是不合法的(它有一個沒有意義的月和日部分),將變為’0000-00-00’。

·         YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的數字,假定數字對於日期類型是有意義的。例如,19830905132800和830905132800被解釋為 ‘1983-09-05 13:28:00’。

·         YYYYMMDD或YYMMDD格式的數字,假定數字對於日期類型是有意義的。例如,19830905和830905被解釋為’1983-09-05’。

·         函數返回的結果,其值適合DATETIME、DATE或者TIMESTAMP上下文,例如NOW()或CURRENT_DATE。

無效DATETIME、DATE或者TIMESTAMP值被轉換為相應類型的「零」值(‘0000-00-00 00:00:00’、’0000-00-00’或者00000000000000)。

對於包括日期部分間割符的字串值,如果日和月的值小於10,不需要指定兩位數。’1979-6-9’與’1979-06-09’是相同的。同樣,對於包括時間部分間割符的字串值,如果時、分和秒的值小於10,不需要指定兩位數。’1979-10-30 1:2:3’與’1979-10-30 01:02:03’相同。

數字值應為6、8、12或者14位長。如果一個數值是8或14位長,則假定為YYYYMMDD或YYYYMMDDHHMMSS格式,前4位數資料表示年。如果數字 是6或12位長,則假定為YYMMDD或YYMMDDHHMMSS格式,前2位數資料表示年。其它數字被解釋為彷彿用零填充到了最近的長度。

指定為非限定符字串的值使用給定的長度進行解釋。如果字串為8或14字元長,前4位數資料表示年。否則,前2位數資料表示年。從左向右解釋字串內出現的各部分,以發現年、月、日、小時、分和秒值。這說明不應使用少於6字元的字串。例如,如果您指定’9903’,認為它資料表示1999年3月,MySQL將在您的資料表內插入一個「零」日期值。這是因為年和月值是99和03,但日部分完全丟失,因此該值不是一個合法的日期。但是,可以明顯指定一個零值來代資料表缺少的月或日部分。例如,可以使用’990300’來插入值’1999-03-00’。

在一定程度上,可以將一個日期類型的值分配給一個不同的日期類型。但是,值可能會更改或丟失一些訊息:

·         如果您為一個DATETIME或TIMESTAMP對像分配一個DATE值,結果值的時間部分被設置為’00:00:00’,因為DATE值未包含時間訊息。

·         如果您為一個DATE對像分配一個DATETIME或TIMESTAMP值,結果值的時間部分被刪除,因為DATE值未包含時間訊息。

·         記住儘管可以使用相同的格式指定DATETIME、DATE和TIMESTAMP值,不同類型的值的範圍卻不同。例如,TIMESTAMP值不能早於1970或晚於2037。這說明一個日期,例如’1968-01-01’,雖然對於DATETIME或DATE值是有效的,但對於TIMESTAMP值卻無效,如果分配給這樣一個對像將被轉換為0。

當指定日期值時請注意某些問題:

·         指定為字串的值允許的非嚴格格式可能會欺騙。例如,值’10:11:12’由於『:』間割符看上去可能像時間值,但如果用於日期上下文值則被解釋為年’2010-11-12’。值’10:45:15’被轉換為’0000-00-00’因為’45’不是合法月。

·         在非嚴格模式,MySQL伺服器只對日期的合法性進行基本檢查:年、月和日的範圍分別是1000到9999、00到12和00到31。任何包含超出這些範圍的部分的日期被轉換成’0000-00-00’。請注意仍然允許您保存非法日期,例如’2002-04-31’。要想確保不使用嚴格模式時日期有效,應檢查應用程式。

在嚴格模式,非法日期不被接受,並且不轉換。

詳細訊息參見5.3.2節,「SQL伺服器模式」

·         包含兩位年值的日期會令人模糊,因為世紀不知道。MySQL使用以下規則解釋兩位年值:

o        00-69範圍的年值轉換為2000-2069。

o        70-99範圍的年值轉換為1970-1999。

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *