MySQL 字符串操作以计算字段中的值

标签 mysql string count

我有这个字符串操作

select product,
       CAST((LENGTH(currencies) - LENGTH(REPLACE(currencies, '*', ''))) / LENGTH('*') AS UNSIGNED) AS currencies_count
  from MY_TABLE

计算此表中单个字段中的“货币”

product       currencies
-----------   --------------
prod_name_1   *usd*cad*euro*
prod_name_2   *usd*cad*
prod_name_3   *usd*cad*euro*
prod_name_4   
prod_name_5   *usd*

字符串操作在所有结果上返回“+1”(例如:prod_name_1,4 种货币而不是 3 种)。这是因为外部组件以这种非连贯方式存储复选框数据(*usd*cad*euro* 而不是 *usd*cad*euro)。

关键是我不能改变这个组件的存储方式。有一种方法可以计算字段中货币的确切数量,忽略最后一个“*”分隔符后的最后一个“空白”值? 如何修改我的字符串操作?

变得疯狂,任何帮助将非常非常感谢!

最佳答案

上面的查询不计算最后一个 * 之后的字符串的空部分。它甚至根本没有 split 它。它只是说:

*eur*usd*

长3个字符
eurusd

要获得正确的值,我认为您应该检查一个空的货币值,如果找到则将结果设置为 0。否则结果是 * 符号的数量减去 1:

SELECT
    CASE WHEN LENGTH(Currencies) = 0 THEN CAST(0 AS UNSIGNED) 
        ELSE CAST((LENGTH(Currencies) - LENGTH(REPLACE(Currencies, '*', ''))) / LENGTH('*') AS UNSIGNED) - 1 END AS currencies_count
FROM MY_TABLE

我没有 mysql 数据库来测试它,但它应该没问题。

关于MySQL 字符串操作以计算字段中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581776/

相关文章:

mysql - SQL在预订系统中查找连续两天

php - 为什么 {if row exist then fetch them} 不起作用?

c# - 访问数组项?

java - 如何更改输入文件中的所有字母并在输出文件中将它们打印为大写?

PHP/MySQL 特定的列数

数据框列中 R 计数值大于零

php - 如果用户已经提交页面,则显示错误消息,然后重定向到引用页面

php - 第一条记录未显示 UNION ALL

strip 的 Python 奇怪的字符串处理问题

MySQL统计结果集中列值的变化