采用REGEXP运算符

{String} REGEXP '[^0-9.]'

isNotNum : true 不是数字 , false 是数字,字符串中有空格也会被判断出来

select ('123' REGEXP '[^0-9.]'); 	-- 0 false
select ('12.3' REGEXP '[^0-9.]'); 	-- 0 false
select ('123a' REGEXP '[^0-9.]');	-- 1 true

我的业务需求:
某个字段上存储的是 单位(张,个…),由于同事存储的时候有些单位存储的是配置表中的单位编码,所以我需要手动的判断一下

IF (
( trim( a.STOCK_UNIT ) REGEXP '[^0-9.]' ),
a.STOCK_UNIT,
( SELECT x.ITEM_CNAME FROM iplat62.TEDCM01 x WHERE x.CODESET_CODE = 'mm.unit' AND x.ITEM_CODE = a.STOCK_UNIT ) 
) AS '单位',

自定义函数(未测试,网上找的)

DELIMITER $$
  DROP FUNCTION IF EXISTS `IsNum` $$
  CREATE FUNCTION `IsNum` (str VARCHAR(25)) RETURNS INT
  BEGIN
  DECLARE iResult INT DEFAULT 0;
  IF ISNULL(str) THEN return 0; END IF;-- NULL 字符串
  IF str = '' THEN return 0; END IF;-- 空字符串
  SELECT str REGEXP '^[0-9]*$' INTO iResult;
  IF iResult = 1 THEN
  RETURN 1;
  ELSE
  RETURN 0;
  END IF;
  END $$
  DELIMITER ;

关于 delimiter 的说明请查看文档 MySQL 中函数定义中 delimiter的说明
  这个函数用来判断给定的字符串是否为函数, 用法示例:
  select IsNum(‘12’); – 结果为 1
  select IsNum(‘12-’); – 结果为 0
  select IsNum(说明) from TABLE_XX

查询纯数字的记录

在这里插入图片描述

SELECT
	name,
	CAST( name AS UNSIGNED INTEGER ) AS val 
FROM
	student
WHERE
	(name = "0" OR name > 0) 
HAVING
	CHAR_LENGTH(name) = CHAR_LENGTH( val );
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐