MySQL日期字符串轉換成NULL值的異常處理

1,YYYYmmdd格式日期轉換爲null

看如下記錄,一個能取到值,一個取不到值** 
mysql> SELECT DATE_FORMAT(STR_TO_DATE(‘20150922 13:01:01’, ‘%Y%m%d %H:%m:%s’),’%H:%m’); 
+————————————————————————–+ 
| DATE_FORMAT(STR_TO_DATE(‘20150922 13:01:01’, ‘%Y%m%d %H:%m:%s’),’%H:%m’) | 
+————————————————————————–+ 
| 13:01 | 
+————————————————————————–+ 
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT(STR_TO_DATE(‘20150922 12:55:00’, ‘%Y%m%d %H:%m:%s’),’%H:%m’); 
+————————————————————————–+ 
| DATE_FORMAT(STR_TO_DATE(‘20150922 12:55:00’, ‘%Y%m%d %H:%m:%s’),’%H:%m’) | 
+————————————————————————–+ 
| NULL | 
+————————————————————————–+ 
1 row in set, 1 warning (0.00 sec)

mysql>

2,查看報錯信息:

mysql> show warnings; 
+———+——+————————————————————————+ 
| Level | Code | Message | 
+———+——+————————————————————————+ 
| Warning | 1411 | Incorrect datetime value: ‘20150922 12:55:00’ for function str_to_date | 
+———+——+————————————————————————+ 
1 row in set (0.00 sec)

mysql> 
報警說是Incorrect datetime value: ‘20150922 12:55:00’ for function str_to_date,不正確的日期格式,所以換成比較規範的日期格式

原blog地址:http://blog.csdn.net/mchdba/article/details/48719765,未經過csdn原博客博主mchdba允許,不能轉載。

3,換成規範的%Y-%m-%d %H:%i:%s試試

mysql> select DATE_FORMAT(str_to_date(‘2015-09-22 13:00:01’, ‘%Y-%m-%d %H:%i:%s’),’%H:%i’); 
+——————————————————————————+ 
| DATE_FORMAT(str_to_date(‘2015-09-22 13:00:01’, ‘%Y-%m-%d %H:%i:%s’),’%H:%i’) | 
+——————————————————————————+ 
| 13:00 | 
+——————————————————————————+ 
1 row in set (0.00 sec)

mysql> select DATE_FORMAT(str_to_date(‘2015-09-22 12:55:00’, ‘%Y-%m-%d %H:%i:%s’),’%H:%i’); 
+——————————————————————————+ 
| DATE_FORMAT(str_to_date(‘2015-09-22 12:55:00’, ‘%Y-%m-%d %H:%i:%s’),’%H:%i’) | 
+——————————————————————————+ 
| 12:55 | 
+——————————————————————————+ 
1 row in set (0.00 sec)

mysql>

看到在規範的格式下,日期從字符串轉換到日期格式,然後截取時分都是能取到值的。

參考官網地址http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_str-to-date

4,再次確定縮小範圍,是%h的問題,將時換成大寫就搞定了

再看到一個案例,將格式變成2015-09-22 13:00:01表準備格式,可以仍然取不到時分值,如下所示:

<code class="hljs asciidoc has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-header" style="box-sizing: border-box;">mysql> select DATE_FORMAT(str_to_date('2015-09-22 13:00:01', '%Y-%m-%d %h:%i:%s'),'%h:%i');
+------------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| DATE_FORMAT(str_to_date('2015-09-22 13:00:01', '%Y-%m-%d %h:%i:%s'),'%h:%i') |
+------------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| NULL                                                                         |
+------------------------------------------------------------------------------+</span>
1 row in set, 1 warning (0.00 sec)

<span class="hljs-header" style="box-sizing: border-box;">mysql> select DATE_FORMAT(str_to_date('2015-09-22 12:55:00', '%Y-%m-%d %h:%i:%s'),'%h:%i');
+------------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| DATE_FORMAT(str_to_date('2015-09-22 12:55:00', '%Y-%m-%d %h:%i:%s'),'%h:%i') |
+------------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| 12:55                                                                        |
+------------------------------------------------------------------------------+</span>
1 row in set (0.00 sec)

mysql> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>

那麼問題在哪裏呢?只能再次去官網找答案,找到http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_get-format 
看到終極標準格式爲:’%Y-%m-%d %H.%i.%s’,換成這個試試,看到範例中的差異在哪裏了嗎?就在於%H和%h的區別啊,如下所示:

<code class="hljs asciidoc has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-header" style="box-sizing: border-box;">mysql> select DATE_FORMAT(str_to_date('20150922 13:00:01', '%Y%m%d %h:%i:%s'),'%h:%i');
+--------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| DATE_FORMAT(str_to_date('20150922 13:00:01', '%Y%m%d %h:%i:%s'),'%h:%i') |
+--------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| NULL                                                                     |
+--------------------------------------------------------------------------+</span>
1 row in set, 1 warning (0.00 sec)

<span class="hljs-header" style="box-sizing: border-box;">mysql> select DATE_FORMAT(str_to_date('20150922 12:55:00', '%Y%m%d %h:%i:%s'),'%h:%i');
+--------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| DATE_FORMAT(str_to_date('20150922 12:55:00', '%Y%m%d %h:%i:%s'),'%h:%i') |
+--------------------------------------------------------------------------+</span>
<span class="hljs-header" style="box-sizing: border-box;">| 12:55                                                                    |
+--------------------------------------------------------------------------+</span>
1 row in set (0.00 sec)

mysql> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>

然後標準的日期格式爲:%Y%m%d %H:%i:%s’或者%Y-%m-%d %H:%i:%s’ 都可以的,如下所示:

select DATE_FORMAT(str_to_date(‘20150922 13:00:01’, ‘%Y%m%d %H:%i:%s’),’%H:%i’); 
select DATE_FORMAT(str_to_date(‘20150922 12:55:00’, ‘%Y%m%d %H:%i:%s’),’%H:%i’);

發佈了19 篇原創文章 · 獲贊 9 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章