我想找出所有的中文字为1个或2个的字段,用什么函数我用
select * from dbo.t1
where len(t1.名字)=1 or len(t1.名字)=2
时会输出英文和数字,而我不想要这些(数字,英文),怎么解决
select * from dbo.t1
where len(t1.名字)=1 or len(t1.名字)=2
时会输出英文和数字,而我不想要这些(数字,英文),怎么解决
select * from
(
select * from dbo.t1 where patindex('%[吖-咗]%',名字) > 0
)t
where len(t.名字)=1 or len(t.名字)=2
--自定义函数--提取中文
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
RETURN @S
END
GOselect len(DBO.CHINA_STR('呵呵ABC123'))
(
aa varchar(10)
)
insert into tb values('aa')
insert into tb values('11')
insert into tb values('中国字')
insert into tb values('小孩之')
insert into tb values('你好')
insert into tb values('我')
select * from
(
select * from tb where patindex('%[吖-咗]%',aa) > 0
) t
where len(aa) = 1 or len(aa) = 2
/*
aa
你好
我(2 行受影响)实例
create table tb1
(
名字 varchar(10)
)
insert into tb1 values('aa')
insert into tb1 values('11')
insert into tb1 values('中国字')
insert into tb1 values('小孩之')
insert into tb1 values('你好')
insert into tb1 values('我')select * from tb1
where (len(名字)=1 and datalength(名字)=2) or (len(名字)=2 and datalength(名字)=4)drop table tb1/*
名字
----------
你好
我(2 行受影响)
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
GO
--123
--------------------------------------------------------------------
--提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--提取中文
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
RETURN @S
END
GO
PRINT DBO.CHINA_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------