Mysql 如何仅替换最后一个字符?

Mysql 如何仅替换最后一个字符?,mysql,replace,Mysql,Replace,这是我的桌子: // table +----+--------+ | id | number | +----+--------+ | 1 | 123 | | 2 | 123. | | 3 | 12.3 | +----+--------+ 我想要这个: // newtable +----+--------+ | id | number | +----+--------+ | 1 | 123 | | 2 | 123 | | 3 | 12.3 | +----

这是我的桌子:

// table
+----+--------+
| id | number |
+----+--------+
| 1  | 123    |
| 2  | 123.   |
| 3  | 12.3   |
+----+--------+
我想要这个:

// newtable
+----+--------+
| id | number |
+----+--------+
| 1  | 123    |
| 2  | 123    |
| 3  | 12.3   |
+----+--------+
我该怎么做

我可以这样做:但我正在寻找更快更好的方法


那么,有没有更好的解决办法?如果不使用IF语句

如果要更改表中的数据,请使用该语句

mysql> CREATE TABLE test(
    -> id INT(1),
    -> number VARCHAR(5)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO test
    -> VALUES(1, '123'),
    -> (2, '123.'),
    -> (3, '12.3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123.   |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)

mysql> UPDATE test
    -> SET number=REPLACE(number, '.', '')
    -> WHERE RIGHT(number,1) = '.';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123    |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)
如果你只想得到表格中的数据,就用这个

mysql> DROP TABLE IF EXISTS test;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE test(
    ->   id INT(1),
    ->   number VARCHAR(5)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO test VALUES
    ->   (1, '123'),
    ->   (2, '123.'),
    ->   (3, '12.3')
    -> ;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123.   |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)

mysql> SELECT
    ->   id,
    ->   CASE
    ->     WHEN RIGHT(number,1) = '.' THEN floor(number)
    ->     ELSE number
    ->   END AS number
    -> from test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123    |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)

如果要更改表中的数据,请使用此选项

mysql> CREATE TABLE test(
    -> id INT(1),
    -> number VARCHAR(5)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO test
    -> VALUES(1, '123'),
    -> (2, '123.'),
    -> (3, '12.3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123.   |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)

mysql> UPDATE test
    -> SET number=REPLACE(number, '.', '')
    -> WHERE RIGHT(number,1) = '.';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123    |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)
如果你只想得到表格中的数据,就用这个

mysql> DROP TABLE IF EXISTS test;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE test(
    ->   id INT(1),
    ->   number VARCHAR(5)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO test VALUES
    ->   (1, '123'),
    ->   (2, '123.'),
    ->   (3, '12.3')
    -> ;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123.   |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)

mysql> SELECT
    ->   id,
    ->   CASE
    ->     WHEN RIGHT(number,1) = '.' THEN floor(number)
    ->     ELSE number
    ->   END AS number
    -> from test;
+------+--------+
| id   | number |
+------+--------+
|    1 | 123    |
|    2 | 123    |
|    3 | 12.3   |
+------+--------+
3 rows in set (0.00 sec)

如果存在,请删除最后的对应字符

SELECT id, TRIM(TRAILING '.' FROM number) FROM test

如果存在,请删除最后的对应字符

SELECT id, TRIM(TRAILING '.' FROM number) FROM test


您是说名为number的列不是使用数字类型存储的吗?这似乎是第一个问题。首先,你想实现什么?是否要替换数据库中以点字符结尾的值?是否只想更改数据库的输出?@GordonLinoff number具有int11类型。但是我在我的查询ROUNDnumber/1000,1中使用了类似的内容。点将出现。。。我也用了SUBSTR,有时候我会得到一个。在这个数字的末尾,现在我想删除它。@HerrSerker我想做的是找到一个更好的方法。实际上我想消除中间的IF语句。也许ypu应该在输出中而不是在业务逻辑中处理这个问题?您是从什么语言/框架进行查询的?您是说名为number的列不是使用数字类型存储的?这似乎是第一个问题。首先,你想实现什么?是否要替换数据库中以点字符结尾的值?是否只想更改数据库的输出?@GordonLinoff number具有int11类型。但是我在我的查询ROUNDnumber/1000,1中使用了类似的内容。点将出现。。。我也用了SUBSTR,有时候我会得到一个。在这个数字的末尾,现在我想删除它。@HerrSerker我想做的是找到一个更好的方法。实际上我想消除中间的IF语句。也许ypu应该在输出中而不是在业务逻辑中处理这个问题?您查询的语言/框架是什么?您的解决方案很好。但实际上这不是我想要的+1你不想在数据库中更改它吗?好吧,对不起,我第一次弄错了,我要尝试其他方法。我编辑答案,我认为这不是你需要的,你的解决方案很好。但实际上这不是我想要的+1你不想在数据库中更改它吗?好吧,对不起,我第一次弄错了,我要尝试其他方法。我编辑答案,我认为这不是你需要的。你能为你的答案添加一些解释吗?什么是小数10,6?小数10,6表示数字有10位数字,其中4位在固定点之前,6位在固定点之后。输出将始终是这样的'X.yyyyyy'X可以是0或更高,但yyyyyyyyyy总是6,例如整数100的'100.000000'或2/3的'0.66666 7'。请对您的答案添加一些解释?什么是小数10,6?小数10,6表示数字有10位数字,其中4位在固定点之前,6位在固定点之后。输出将始终是这样的'X.yyyyy'X可以是0或更高,但yyyyyyyy总是6,例如整数100的'100.000000'或2/3的'0.66666 7'。为代码添加解释总是一件好事。另外,虽然这不是禁止的,但是如果你在同一个答案中提供可能的解决方案会更好。谢谢为代码添加解释总是一件好事。另外,虽然这不是禁止的,但是如果你在同一个答案中提供可能的解决方案会更好。谢谢