为什么MySQL CAST在存储的函数中的运行方式有所不同?

时间:2019-07-11 19:48:09

标签: mysql casting

我正在尝试编写一个使用CAST的MySQL函数,但是当我在该函数外部执行相同的cast语句时,却遇到了不会出现的错误。

我有一个表,其中的数字值也可以包含字母字符。

mysql> select * from runway;
+-------------+
| base_end_id |
+-------------+
| 009         |
| 01          |
| 01C         |
| 01H         |
| 01L         |
| 01R         |
| 01W         |
| 02          |
| 02C         |
| 02H         |
| 02L         |
| 02R         |
| 02W         |
+-------------+

如果我将其强制转换为整数,MySQL会愉快地忽略以下字符:

mysql> SELECT base_end_id, cast(base_end_id as SIGNED) from runway;
+-------------+-----------------------------+
| base_end_id | cast(base_end_id as SIGNED) |
+-------------+-----------------------------+
| 009         |                           9 |
| 01          |                           1 |
| 01C         |                           1 |
| 01H         |                           1 |
| 01L         |                           1 |
| 01R         |                           1 |
| 01W         |                           1 |
| 02          |                           2 |
| 02C         |                           2 |
| 02H         |                           2 |
| 02L         |                           2 |
| 02R         |                           2 |
| 02W         |                           2 |
+-------------+-----------------------------+

但是如果我在存储的函数中执行相同的操作,则会收到错误消息:

mysql> SELECT base_end_id, ConvertRunway(base_end_id) from runway;
ERROR 1292 (22007): Truncated incorrect INTEGER value: '01C'

ConvertRunway函数为:

FUNCTION `ConvertRunway`(rwy varchar(10))
RETURNS int(11)
BEGIN
RETURN cast(rwy as SIGNED);
END

如何在函数中使用CAST?

0 个答案:

没有答案