mysql 中用sql判断两个字段长度是不是相等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 中用sql判断两个字段长度是不是相等相关的知识,希望对你有一定的参考价值。

比如
字段a varchar(200) 数据: abcd
字段b varchar(1000) 数据: 15,石家庄|15,石家庄|15,石家庄|15,石家庄|

字段b 需要以 | 分割。也可以说有几个 | 就算字段b的长度是几。
15,石家庄| 这算长度1。
查询字段a和字段b长度不等的数据:
select * from 表 where length(a) <> length(b)

正常是length(b) ,但现在字段b是用|分割的,怎么写

create function myLength(@col varchar(1000)) returns int
as
begin
declare @v int
set @v=1
declare @i int
set @i=charindex(\'|\',@col)
while(@i>0)
begin
set @v=@v+1
set @col=substring(@col,@i+1,len(@col))
set @i=charindex(\'|\',@col)
end
return @v
end
go

select dbo.mylength(\'123\') //结果是1
select dbo.mylength(\'|123\') //结果是2
select dbo.mylength(\'|123|\') //结果是3
你的语句就可以用:
select * from 表 where dbo.mylength(a) <> dbo.mylength(b)
--注意函数名前要加dbo.
参考技术A select * from 表 where char_length(a) <> char_length(b) - char_length(replace(b ,'|',''))

or

select * from 表 where length(a) <> length(b) - length(replace(b ,'|',''))
参考技术B 单一语句无法实现

Mysql去除中文字符&判断字段是不是有中文字符

参考技术A

背景:用户表中的name存的是用户名字的拼音和中文。
需求:名字去除掉所有的中文字符。

解决方案:
通过CONVERT(name USING ASCII)把中文转换为?,然后再进行替换。

引申问题:怎么判断字段包含中文字符
方法1:查询CONVERT(name USING ASCII)转换为后有?的数据。

方法2:通过正则表达式查询,\'[^ -~]\'或\'e[4-9][0-9a-f]4\'或者\'^(..)*(E[4-9])\'表示含中文。

方法3:通过length()和char_length()返回值不同进行查询。

参考链接:
( https://blog.csdn.net/u012731379/article/details/64125572 )

以上是关于mysql 中用sql判断两个字段长度是不是相等的主要内容,如果未能解决你的问题,请参考以下文章

MySQL判断一个字段不包含中文

MySQL语句中判断(字段值是不是为0)不是的话...

mysql和php字符长度判断

mysql如何判断字段时间小于当前时间3天

C语言判断两个长度不等的字符数组是不是相等的方法

mysql 先判断表中的某一字段 如果为空 插入数据 否则 更新该条数据