mysql 怎么查询表中的字段的个数

mysql 怎么查询表中的字段的个数,第1张

方法一,在你的程序中直接

desc tablename

然后总行数就是你的字段数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

mysql>desc ysks

+-------+---------------+-----

| Field | Type | Null

+-------+---------------+-----

| 单号 | int(11) | YES

| 金额 | decimal(10,2) | YES

| 已收 | decimal(10,2) | YES

| 日期 | bigint(20)| YES

| 名称 | varchar(10) | YES

| 余额 | decimal(10,2) | YES

| 备注 | varchar(10) | YES

| 品名 | varchar(10) | YES

+-------+---------------+-----

8 rows in set (0.06 sec)

mysql>select FOUND_ROWS()

+--------------+

| FOUND_ROWS() |

+--------------+

|8 |

+--------------+

1 row in set (0.06 sec)

mysql>

方法二,通过系统表information_schema.`COLUMNS` ( mysql5以上版本支持)

mysql>select count(*) from information_schema.`COLUMNS`

->where TABLE_SCHEMA='csdn'

->and TABLE_NAME='ysks'

+----------+

| count(*) |

+----------+

|8 |

+----------+

1 row in set (0.06 sec)

mysql>

CREATE TABLE person (

name varchar(20)

)

INSERT INTO person VALUES ('a,b,c')

INSERT INTO person VALUES ('a,b')

INSERT INTO person VALUES ('a,c')

DELIMITER //

DROP FUNCTION GetTextCount //

/**********

-- 获取字符串中有几个部分.

**********/

CREATE FUNCTION GetTextCount(pSourceText VARCHAR(255), pDivChar CHAR(1))

RETURNS TINYINT

BEGIN

-- 预期结果.

DECLARE vResult TINYINT

-- 当前逗号位置.

DECLARE vIndex INT

-- 前一个逗号的位置.

DECLARE vPrevIndex INT

-- 结果的初始值.

SET vResult = 1

-- 查询第一个 逗号的位置.

SET vIndex = INSTR(pSourceText, pDivChar)

IF vIndex = 0 THEN

-- 参数中没有逗号,直接返回.

RETURN vResult

END IF

-- 初始化情况,前一个逗号不存在.

SET vPrevIndex = 0

-- 循环处理。

WHILE vIndex >0 DO

-- 结果递增.

SET vResult = vResult + 1

-- 前一个逗号的位置 = 当前逗号的位置

SET vPrevIndex = vIndex

-- 查询下一个逗号的位置.

SET vIndex = LOCATE(pDivChar, pSourceText, vPrevIndex + 1)

END WHILE

-- 返回结果.

RETURN vResult

END

//

DROP FUNCTION GetTextValue //

/**********

-- 获取字符串中具体某一个部分的数据.

**********/

CREATE FUNCTION GetTextValue(pSourceText VARCHAR(255), pDivChar CHAR(1), pIndex TINYINT)

RETURNS VARCHAR(255)

BEGIN

-- 预期结果.

DECLARE vResult VARCHAR(255)

IF pIndex = 1 THEN

SELECT SUBSTRING_INDEX(pSourceText, pDivChar, 1) INTO vResult

ELSE

SELECT

REPLACE(

SUBSTRING_INDEX(pSourceText, pDivChar, pIndex),

CONCAT(SUBSTRING_INDEX(pSourceText, pDivChar, pIndex - 1) , pDivChar),

'') INTO vResult

END IF

-- 返回.

RETURN vResult

END

//

DELIMITER

SELECT

GetTextValue(t.name, ',', MaxNum.No) AS `名称`,

COUNT(*) AS `个数`

FROM

person t,

(SELECT 1 No UNION ALL

SELECT 2 No UNION ALL

SELECT 3 No UNION ALL

SELECT 4 No UNION ALL

SELECT 5 No ) MaxNum

WHERE

GetTextCount(t.name, ',') >= MaxNum.No

GROUP BY

GetTextValue(t.name, ',', MaxNum.No)

+------+------+

| 名称 | 个数 |

+------+------+

| a|3 |

| b|2 |

| c|2 |

+------+------+

3 rows in set (0.01 sec)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8669334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存