You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure环境下T-SQL实现NVARCHAR列转数值列的其他方法问询

几种在Azure SQL中提取数字列的替代方法

嘿,我来给你分享几种实现这个需求的不同方式,每种都有各自的适用场景,你可以根据实际情况挑选:

  • 使用TRY_CAST(推荐)
    这是最简洁且可靠的方法,TRY_CAST会尝试将字符串转换为指定的数值类型,如果转换失败(比如是字符、非数字格式)就返回NULL,完美符合你的需求,而且还支持任意长度的数字(不只是两位):

    SELECT name, size, TRY_CAST(size AS INT) AS numSize FROM product;
    

    比如如果size是'123'也能正确转成INT,而如果是'S'或NULL就返回NULL,比你原来的IIF写法更灵活。

  • 使用CASE表达式
    如果你需要更精细的条件控制(比如只保留特定长度的数字),CASE比IIF可读性更强,扩展性也更好。比如复刻你原来的两位数字匹配逻辑:

    SELECT name, size, 
           CASE 
               WHEN size LIKE '[0-9][0-9]' THEN CAST(size AS INT) 
               ELSE NULL 
           END AS numSize 
    FROM product;
    

    如果要匹配任意纯数字的字符串,可以把条件改成WHEN size NOT LIKE '%[^0-9]%',这样能排除任何包含非数字字符的情况。

  • 使用ISNUMERIC函数(注意局限性)
    这个方法可以识别数字格式的字符串,但要注意它的判定范围比较宽,比如会把'$123'、'12.5'这类也识别为数字,如果你只需要纯整数的话要谨慎使用:

    SELECT name, size, 
           CASE 
               WHEN ISNUMERIC(size) = 1 THEN CAST(size AS INT) 
               ELSE NULL 
           END AS numSize 
    FROM product;
    

    比如如果size是'12.3',ISNUMERIC会返回1,但CAST成INT会报错,所以这种情况还是TRY_CAST更安全。

总的来说,TRY_CAST是最省心的选择,而CASE适合需要自定义匹配规则的场景,ISNUMERIC则要根据你的数据情况来决定是否使用。

内容的提问来源于stack exchange,提问作者Hana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:08:09