mysql 怎样替换一模一样相同的字符,而包含相同字符的替换?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 怎样替换一模一样相同的字符,而包含相同字符的替换?相关的知识,希望对你有一定的参考价值。
表中有每多数据,有些数值有些数据,我要把等于0的值替换掉而包含有0 这个字符的不被替换,mysql语句怎样写?
参考技术A update 表名a set 需要修改的字段名col=(select 字段名col from (select * from 表名a ) as b where 等于0的字段id='0' )where 等于0的字段id='0';由于我没有你的表结构,不知道你具体要什么样的操作。而且,你的问题也比较模糊。我只能这么写给你一个思路,你记住MYsql中update不能直接使用select的结果 要给个别名才行。来自:求助得到的回答 参考技术A 假设你的表名字 Test, 列名 TestCol, 要把 等于0的值替换为 -1
如果 TestCol 数据类型是 数字类型的
UPDATE
Test
SET
TestCol = -1
WHERE
TestCol = 0;
如果 TestCol 数据类型是 字符类型的
UPDATE
Test
SET
TestCol = '-1'
WHERE
TestCol = '0';
如何计算 MySQL / 正则表达式替换器中的单词?
【中文标题】如何计算 MySQL / 正则表达式替换器中的单词?【英文标题】:How to count words in MySQL / regular expression replacer? 【发布时间】:2010-12-17 20:16:29 【问题描述】:我怎样才能在 MySQL 查询中具有与 Regex.Replace 函数相同的行为(例如在 .NET/C# 中)?
我需要这个,因为和很多人一样,我想计算一个字段中的单词数。但是,我对以下答案不满意(在该网站上多次给出):
SELECT LENGTH(name) - LENGTH(REPLACE(name, ' ', '') +1 FROM table
因为当两个单词之间有超过一个空格时,它不会给出好的结果。
顺便说一句,我认为 Regex.Replace 函数可能很有趣,所以欢迎所有好的想法!
【问题讨论】:
出于好奇,为什么要数字段中的单词? 【参考方案1】:MySQL 8.0 现在提供了一个不错的REGEXP_REPLACE 函数,这让这变得更加简单:
SQL
SELECT -- Count the number of gaps between words
CHAR_LENGTH(txt) -
CHAR_LENGTH(REGEXP_REPLACE(
txt,
'[[:space:]]([[:space:]]*)', -- A chunk of one or more whitespace characters
'$1')) -- Discard the first whitespace character and retain the rest
+ 1 -- The word count is 1 more than the number of gaps between words
- IF (txt REGEXP '^[[:space:]]', 1, 0) -- Exclude whitespace at the start from count
- IF (txt REGEXP '[[:space:]]$', 1, 0) -- Exclude whitespace at the end from count
AS `Word count`
FROM tbl;
演示
DB-Fiddle online demo
【讨论】:
【参考方案2】:更新:现在添加了a separate answer for MySQL 8.0+,应该优先使用。 (保留这个答案,以防被限制使用早期版本。)
几乎是 this question 的副本,但此答案将解决基于来自 this blog post 的自定义正则表达式替换器的高级版本计算单词的用例。
演示
Rextester online demo
对于示例文本,计数为 61 - 与我尝试过的所有在线单词计数器相同(例如 https://wordcounter.net/)。
SQL (为简洁起见,不包括函数代码):
SELECT txt,
-- Count the number of gaps between words
CHAR_LENGTH(txt) -
CHAR_LENGTH(reg_replace(txt,
'[[:space:]]+', -- Look for a chunk of whitespace
'^.', -- Replace the first character from the chunk
'', -- Replace with nothing (i.e. remove the character)
TRUE, -- Greedy matching
1, -- Minimum match length
0, -- No maximum match length
1, -- Minimum sub-match length
0 -- No maximum sub-match length
))
+ 1 -- The word count is 1 more than the number of gaps between words
- IF (txt REGEXP '^[[:space:]]', 1, 0) -- Exclude whitespace at the start from count
- IF (txt REGEXP '[[:space:]]$', 1, 0) -- Exclude whitespace at the end from count
AS `word count`
FROM tbl;
【讨论】:
【参考方案3】:答案是否定的,你不能在 MySQL 中拥有相同的行为。
但我建议您早点查看question 的主题,该主题链接到据称启用某些此功能的 UDF。
【讨论】:
【参考方案4】:有 REGEXP_REPLACE 可用 MySQL user-defined functions。
字数统计:如果您可以控制进入数据库的数据,则可以在插入之前删除双空格。此外,如果您必须经常访问字数统计,您可以在代码中计算一次并将计数存储在数据库中。
【讨论】:
以上是关于mysql 怎样替换一模一样相同的字符,而包含相同字符的替换?的主要内容,如果未能解决你的问题,请参考以下文章
Python练习题8(替换相同的字符串并输出):输入两个字母串,将两个字母串都包含的字母用'_'替换后,输出两个字母串的剩余部分 (不能为空串,区别大小写,只能包含字母)
vim编辑器,如何能够简单描述替换成某相同字符\N次的要求?