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'。为代码添加解释总是一件好事。另外,虽然这不是禁止的,但是如果你在同一个答案中提供可能的解决方案会更好。谢谢为代码添加解释总是一件好事。另外,虽然这不是禁止的,但是如果你在同一个答案中提供可能的解决方案会更好。谢谢