SQL Server取字符串中数字

本文深入解析SQL中的alterFUNCTION命令,具体展示了如何使用dbo.F_Get_Number函数来处理字符串,首先去除包含非数字字符的部分,接着将剩余字符串中的问号替换为指定字符。此函数在数据库操作中对于数据清洗和预处理环节具有重要意义。
alter FUNCTION dbo.F_Get_Number (@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 REPLACE(@S,'?','');
END
GO

 

 

SQL Server 中,从字符串中提数字可以使用多种方法。一种常见的方法是利用 `PATINDEX` 和 `SUBSTRING` 函数结合循环来提字符串中的数字部分。以下是一个示例查询,展示如何从字符串中提所有数字: ```sql DECLARE @inputString VARCHAR(100) = 'abc123def456ghi789'; DECLARE @resultString VARCHAR(100) = ''; WHILE PATINDEX('%[^0-9]%', @inputString) > 0 BEGIN SET @inputString = STUFF(@inputString, PATINDEX('%[^0-9]%', @inputString), 1, ''); END SET @resultString = @inputString; SELECT @resultString AS ExtractedNumbers; ``` ### 解释 1. **`PATINDEX('%[^0-9]%', @inputString)`**:查找字符串中第一个非数字字符的位置。 2. **`STUFF(@inputString, PATINDEX('%[^0-9]%', @inputString), 1, '')`**:从字符串中删除找到的非数字字符。 3. **循环执行**:直到字符串中不再包含非数字字符为止。 4. **最终结果**:`@resultString` 将只包含数字。 ### 另一种方法 如果希望使用更简洁的方式,可以使用 `TRANSLATE` 和 `REPLACE` 函数(适用于 SQL Server 2022 及更高版本): ```sql DECLARE @inputString VARCHAR(100) = 'abc123def456ghi789'; SELECT REPLACE( TRANSLATE( @inputString, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', REPLICATE('', 52) ), ' ', '' ) AS ExtractedNumbers; ``` ### 解释 1. **`TRANSLATE`**:将所有字母替换为空字符。 2. **`REPLACE`**:移除可能的空格。 ### 注意事项 - 如果使用的是 SQL Server 2016 或更早版本,`TRANSLATE` 函数不可用,需要使用第一种方法。 - 上述方法假设输入字符串中的数字字符为字母或其他非数字符号。如果字符串中包含特殊符号(如 `-`, `+`, `.` 等),可以根据需要调整逻辑。 ### 相关问题 1. 如何在 SQL Server 中提字符串中的字母部分? 2. SQL Server 中是否有内置函数可以直接提字符串中的数字? 3. 如何从包含多个数字字符串中提特定位置的数字
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值