SQL中怎样提取纯数字或者纯字母的字段??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中怎样提取纯数字或者纯字母的字段??相关的知识,希望对你有一定的参考价值。

比如一列里面有abc 123 123abc 现在要过滤掉123abc这种的 把123 和abc分别提取出来

完全按照DB2语法设计:
drop function TEST
go
create function test(@input varchar(100))
returns int
begin atomic
declare @int int default 0;
declare @input_lenght int default 0;
set @input_lenght = length(@input);
while @input_lenght <> 0 do
if ( substr(@input,length(@input) - @input_lenght +1,1) in ('0','1','2','3','4','5','6','7','8','9') ) then
set @int = @int + 0;
elseif ( substr(@input,length(@input) - @input_lenght +1,1) in ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')) then
set @int = @int - 1;
end if;
set @input_lenght = @input_lenght -1;
end while;
if ( @int = 0 or @int = -1* length(@input)) then --- 如果累积为0全是数字;如果累积正好是-1乘以长度则正好全是字段
return 0;
else
return 1;
end if;
end
go
select test ('123456') from sysibm.dual 结果是 0
select test ('123b456a') from sysibm.dual 结果是 1
select test ('abcdefg') from sysibm.dual 结果是 0
参考技术A select * from a where isnumeric(b)
union all
select * from a where NOT isnumeric(b)

--其中b为需要过滤掉的列名
--测试没有问题,有问题追问

本回答被提问者采纳
参考技术B 加中括号:[数字]、[字母] 参考技术C 哪一种数据库
应该是使用正则来解决,搜索下 sqlserver 使用正则

java密码正则表达式(可以是纯数字,也可以是纯字母,也可以是数字+字母,6-16 位)

正则表达式是一种描述字符串集合的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于探索、编辑或者操作文本和数据。它超出了Java程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。正则表达式的变化是复杂的,一旦你理解了他们是如何被构造的话,你就能解析或者构建任意的正则表达式了。
密码校验规则如下:
1.必须包含数字、字母、特殊字符三种
2.长度至少8位
3.不能包含3位及以上相同字符的重复(hhh123@jixxx)
4.不能包含3位及以上字符组合的重复(123q123c123)
5.不能包含3位以上的正序及逆序连续字符(123#wete#321)
6.不能包含空格、制表符、换页符等空白字符
7.支持特殊字符范围:^$./,;:'!@#%&*|?+()[]

按照需求进行正则表达式拆解

规则1&&8:
str.matches("^.*[a-zA-Z]+.*$") && str.matches("^.*[0-9]+.*$")
&& str.matches("^.*[/^/$/.//,;:'!@#%&/*/|/?/+/(/)/[/]//]+.*$")

规则2:
str.matches("^.8,$")

规则3:
!str.matches("^.*(.)\\12,+.*$")

规则4:
!str.matches("^.*(.3)(.*)\\1+.*$")

规则5&&7:
javaImpl:
first change str to char[]
then for Math.abs(cc[0] - cc[1]) == 1 && (cc[0] - cc[1]) == (cc[1] - cc[2])
如果想去掉特殊字符的连续:
first str.split("[^\\w]+") as str1[]
then for str1[]
then for str1[i] javaImpl:

规则6:
!str.matches("^.*[\\s]+.*$")
参考技术A ^[0-9a-zA-Z]6,16$
[a-z0-9A-Z]表示是字母或数字
6, 16表示重复出现6~16次
^表示从字符串头开始匹配
$表示匹配到字符串末尾
如果不加^和$字符串中如果有符合条件的串也会被匹配本回答被提问者采纳

以上是关于SQL中怎样提取纯数字或者纯字母的字段??的主要内容,如果未能解决你的问题,请参考以下文章

java密码正则表达式(可以是纯数字,也可以是纯字母,也可以是数字+字母,6-16 位)

怎样提取excel单元格中的部分数字

sql server中对字段使用正则表达式替换???

有没有一种加密算法,把纯数字的加密成16位的密文,字母与数字组合的加密成32位的???

6到16位数字不能是纯数字,字母或字符怎么设?

正则表达式提取数字