这个是我以前学习写的一个小函数,迁移过来。
其中要注意的有:
1、“^”:对两个整数值执行“位异或”运算。
2、“patindex”:你的表达式在条件中的位置。
3、“struff”:删除指定长度值并在指定位置插入另一值。
SQL 截取字符串中字母或数字
--=======================
--截取字符串中所有的数字
--SELECT dbo.F_Get_No('JUST A TEST:123!')
--=======================
CREATE function dbo.F_Get_No
(
@No varchar(100)
)
RETURNS INT
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@No)>0
BEGIN
SET @No=STUFF(@No,PATINDEX('%[^0-9]%',@No),1,'')
END
RETURN CONVERT(INT,@No)
END
--=======================
--截取字符串中所有的字母
--SELECT dbo.F_Get_Letter('JUST A TEST:123!')
--=======================
ALTER function dbo.F_Get_Letter
(
@Letter NVARCHAR(100)
)
RETURNS NVARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^A-Z]%',@Letter)>0
BEGIN
SET @Letter=STUFF(@Letter,PATINDEX('%[^A-Z]%',@Letter),1,'')
END
RETURN @Letter
END
--=======================
--截取字符串中所有的数字
--SELECT dbo.F_Get_No('JUST A TEST:123!')
--=======================
CREATE function dbo.F_Get_No
(
@No varchar(100)
)
RETURNS INT
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@No)>0
BEGIN
SET @No=STUFF(@No,PATINDEX('%[^0-9]%',@No),1,'')
END
RETURN CONVERT(INT,@No)
END
--=======================
--截取字符串中所有的字母
--SELECT dbo.F_Get_Letter('JUST A TEST:123!')
--=======================
ALTER function dbo.F_Get_Letter
(
@Letter NVARCHAR(100)
)
RETURNS NVARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^A-Z]%',@Letter)>0
BEGIN
SET @Letter=STUFF(@Letter,PATINDEX('%[^A-Z]%',@Letter),1,'')
END
RETURN @Letter
END
转载于:https://blog.51cto.com/jayai/194199