我正在使用此代码从字符串中删除非数字字符:
map(u => (u.someField)).result.map(_.headOption.match {
case Some(0) => .....
})
我希望如果我调用此函数,将输入字符串作为输入:
ALTER FUNCTION [dbo].[StripNonNumerics](@Temp VARCHAR(255))
RETURNS VARCHAR
AS
BEGIN
DECLARE @KeepValues AS VARCHAR(50);
SET @KeepValues = '%[^0-9]%';
WHILE PATINDEX(@KeepValues, @Temp) > 0
BEGIN
SET @Temp = STUFF(@Temp, PATINDEX(@KeepValues, @Temp), 1, '');
END
RETURN @Temp
END;
我可以得到这个输出:
select [dbo].[StripNonNumerics]('vAn34nd2')
相反,我获得了:
342
我更改了输入以测试此行为,我注意到它只需要第一个非数字字符序列。你能告诉我我在俯瞰什么吗?
由于
答案 0 :(得分:4)
只需将返回定义更改为:
RETURNS varchar(255)
如果省略长度,则默认长度为1
答案 1 :(得分:2)
我只是添加另一种方法来完成上述工作..
DECLARE @X VARCHAR(100)='vAn34nd2', @Y VARCHAR(100)=''
SELECT @Y = @Y+ VAL FROM(
SELECT SUBSTRING(@X,number,1) AS VAL
FROM master.dbo.spt_values
WHERE type='P' AND number BETWEEN 1 AND LEN(@X)
AND ISNUMERIC(SUBSTRING(@X,number,1))=1
)A
SELECT @Y