首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中一行中数值和非数字列值的显示计数

问mysql中一行中数值和非数字列值的显示计数
EN

Stack Overflow用户
提问于 2014-08-20 07:37:03
回答 3查看 5.9K关注 0票数 6

我有一个具有整数和非整数值的列名的表测试。

代码语言:javascript
复制
+------------+
| names      |
+------------+
| 123        |
| 123abc     |
| 89         |
| dkkjdk     |
| dkdn       |
+------------+

我想在一行中显示整数和非整数值的计数,如下所示

代码语言:javascript
复制
integer_count non_integer_count
2               3

我尝试使用此查询打印整数值。

代码语言:javascript
复制
select cast(names as signed) as int_val from test;

但我得到了这个结果

代码语言:javascript
复制
+---------+
| int_val |
+---------+
|     123 |
|     123 |
|      89 |
|       0 |
|       0 |
+---------+

name字段是varchar(20)字段。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-18 05:52:12

这是解决办法

代码语言:javascript
复制
SELECT COUNT(CASE WHEN not names REGEXP '^[0-9]+$' THEN 1 END) AS ALPHA, COUNT(CASE WHEN names REGEXP '^[0-9]+$' THEN 1 END) AS DIGIT FROM test;

输出

代码语言:javascript
复制
+-------+-------+
| ALPHA | DIGIT |
+-------+-------+
|     3 |     2 |
+-------+-------+
票数 7
EN

Stack Overflow用户

发布于 2014-08-20 07:47:59

使用基于regex的条件之和:

代码语言:javascript
复制
select
    sum(names rlike '^[0-9]+$') integer_count,
    sum(names not rlike '^[0-9]+$') non_integer_count
from test

请参阅SQLFiddle

一些解释:

  • rlike是like的regex版本
  • 如果整个值是一个或多个数字,regex ^[0-9]+$就匹配。注意^和$,如果没有它们,它将测试值中任何位置的数字。
  • 使用sum(condition)计算条件为真的次数,因为(在mysql中) true为1,false为0
票数 1
EN

Stack Overflow用户

发布于 2014-08-20 07:46:03

您可以使用对replace的10次调用来获得没有数字的名称。然后,您可以通过比较名称的长度和没有数字的名称来计算数字数:

代码语言:javascript
复制
select  names
,       length(names) - length(non_digit) as digit_chars
,       length(non_digit) as non_digit_chars
from    (
        select  replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
                    names, '0', ''),
                    '1', ''),
                    '2', ''),
                    '3', ''),
                    '4', ''),
                    '5', ''),
                    '6', ''),
                    '7', ''),
                    '8', ''),
                    '9', '') as non_digit
        ,       names
        from    YourTable
        ) as SubQueryAlias

SQL Fiddle中的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25399214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档