我目前有以下SQL查询,它从列中删除%符号,并将空值更改为NULL

SELECT col,
CASE
    WHEN (REPLACE(col, '%', '') = '') THEN NULL
    ELSE REPLACE(col, '%', '')
    END AS newcol
    FROM test;

我现在试图在这之后将其转换为INT,但我得到了语法错误,我试图用下面的代码这样做,但我收到了语法错误.

SELECT col,
       CASE WHEN (REPLACE(col, '%', '') = '') THEN NULL
            ELSE CAST(REPLACE(col, '%', '') AS INT)
       END AS newcol
FROM test;

但我得到了以下代码错误:

错误代码:1064.您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解使用近INT的正确语法

列"col"(varchar)如下所示

col
7%
_
9
60%

我想要以下列,但作为int

colInt
7
Null
9
60

推荐答案

这是你要找的吗?

SELECT col,
       CASE WHEN REPLACE(col, '%', '') = '' 
            THEN NULL
            ELSE CAST(REPLACE(col, '%', '') AS UNSIGNED)
       END AS newcol
FROM test;

你也可以这样写:

SELECT col,
       CASE WHEN NOT REPLACE(col, '%', '') = '' 
            THEN CAST(REPLACE(col, '%', '') AS UNSIGNED)
       END AS newcol
FROM test;

有关数字数据类型here的更多信息.

关于MySQL CAST函数here的更多信息.

Mysql相关问答推荐

使用MySQL工作台导出具有数据的数据库表并导入到其字段具有不同数据类型的同一表中

无法确定查询逻辑

对匹配两个或多个表的表结果进行排序

使用 awk 重写 maxscale 过滤器

将 JSON 类型的列与特定字符串值进行比较

为什么没有创建此触发器?

Mysql Pivot 查询/建议

为什么一个 10 位的电话号码不能存储在长度为 10 的整数中?

是否可以在一个查询中将字符串附加到许多匹配的行

从 SQL 中的左连接和内连接中减go 计数

Mysql 相等性反对 false 或 true

结果差异(MySQL 5.7 vs MySQL 8.0)

PHP PDO 与普通 mysql_connect

错误 1396 (HY000): 'user'@'localhost' 的操作 DROP USER 失败

如何通过一个查询批量更新 mysql 数据?

安装 mysql-python (Windows)

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

将 mySQL 查询作为 cron 作业(job)运行?

在 WHERE 子句中使用 mysql concat()?

MySQL - 错误 1045 - 访问被拒绝