隱式轉換
在MySQL中,使用+0
運算符可以將一個非數字的值隱式地轉換為數字。這在進行數學運算或比較操作時非常有用。
需要注意的是,在使用+0
進行隱式轉換時,MySQL會盡可能將字符串轉換為數字。如果字符串不能轉換為數字,則會返回0。
mysql> select "000123456";
+-----------+
| 000123456 |
+-----------+
| 000123456 |
+-----------+
1 row in set (0.00 sec)
mysql> select "000123456"+0;
+---------------+
| "000123456"+0 |
+---------------+
| 123456 |
+---------------+
1 row in set (0.00 sec)
顯式轉換
CAST
在MySQL中,CAST函數用于將一個表達式轉換為指定的數據類型。它可以用于將一個值轉換為不同的數據類型,例如整數、浮點數、字符串等。CAST函數的語法如下:
CAST(expression AS data_type)
其中,expression
是要進行轉換的表達式,data_type
是要轉換成的目標數據類型。
使用CAST函數時,需要注意以下幾點:
如果轉換失敗,MySQL會返回一個NULL值。例如,將一個非數字字符串轉換為整數時會失敗。
CAST函數在執行時可能會導致精度損失或溢出,特別是將一個大的值轉換為小的數據類型時。
在某些情況下,可以直接使用類型轉換操作符(如+0
)來進行類型轉換,這通常比使用CAST函數更高效。
mysql> select CAST("000123456" AS SIGNED);
+-----------------------------+
| CAST("000123456" AS SIGNED) |
+-----------------------------+
| 123456 |
+-----------------------------+
1 row in set (0.01 sec)mysql> select CAST("000123456" AS UNSIGNED);
+-------------------------------+
| CAST("000123456" AS UNSIGNED) |
+-------------------------------+
| 123456 |
+-------------------------------+
1 row in set (0.00 sec)mysql> select CAST("-000123456" AS SIGNED);
+------------------------------+
| CAST("-000123456" AS SIGNED) |
+------------------------------+
| -123456 |
+------------------------------+
1 row in set (0.00 sec)mysql> select CAST("-000123456" AS DECIMAL);
+-------------------------------+
| CAST("-000123456" AS DECIMAL) |
+-------------------------------+
| -123456 |
+-------------------------------+
1 row in set (0.02 sec)mysql> select CAST("000123456" AS DECIMAL);
+------------------------------+
| CAST("000123456" AS DECIMAL) |
+------------------------------+
| 123456 |
+------------------------------+
1 row in set (0.00 sec)
CONVERT
在MySQL中,可以使用CONVERT()函數來轉換數據類型或格式。該函數用于將一個表達式轉換為指定的數據類型或格式。
CONVERT()
函數的語法如下:
CONVERT(expression, data_type)
其中,expression
是要進行轉換的表達式,data_type
是要轉換成的目標數據類型。
需要注意的是,CONVERT()
函數可以用于日期和時間類型的轉換,并且可以指定日期格式。
mysql> select CONVERT("000123456", SIGNED);
+------------------------------+
| CONVERT("000123456", SIGNED) |
+------------------------------+
| 123456 |
+------------------------------+
1 row in set (0.02 sec)mysql> select CONVERT("000123456", UNSIGNED);
+--------------------------------+
| CONVERT("000123456", UNSIGNED) |
+--------------------------------+
| 123456 |
+--------------------------------+
1 row in set (0.00 sec)mysql> select CONVERT("000123456", DECIMAL);
+-------------------------------+
| CONVERT("000123456", DECIMAL) |
+-------------------------------+
| 123456 |
+-------------------------------+
1 row in set (0.00 sec)mysql> select CONVERT("-000123456", SIGNED);
+-------------------------------+
| CONVERT("-000123456", SIGNED) |
+-------------------------------+
| -123456 |
+-------------------------------+
1 row in set (0.00 sec)mysql> select CONVERT("-000123456", DECIMAL);
+--------------------------------+
| CONVERT("-000123456", DECIMAL) |
+--------------------------------+
| -123456 |
+--------------------------------+
1 row in set (0.00 sec)
字符串轉日期
下面是一個使用CONVERT函數將日期從一種格式轉換為另一種格式的示例:
mysql> SELECT CONVERT('2023-11-23', DATE) AS converted_date;
+----------------+
| converted_date |
+----------------+
| 2023-11-23 |
+----------------+
1 row in set (0.00 sec)
在上面的示例中,日期’2019-12-31’被轉換為DATE格式,并存儲在名為converted_date的列中。
你還可以在轉換時使用其他日期格式。下面是一些常見的日期格式:
DATE: 日期格式 (YYYY-MM-DD)
TIME: 時間格式 (HH:MM:SS)
DATETIME: 日期時間格式 (YYYY-MM-DD HH:MM:SS)
YEAR: 年份格式 (YYYY)
如果你想將日期轉換為特定的格式,只需在CONVERT函數的第二個參數中指定所需的格式。
參考
https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert
https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast