Azure Data Factory Data Flow中isDecimal函数校验异常求助
解决Azure Data Factory Data Flow中isDecimal函数校验十进制数值失效的问题
问题原因
你遇到的核心问题是对isDecimal函数的参数理解有误:
isDecimal的第二个参数是数值格式模式字符串(类似#,##0.00),而非toDecimal函数中使用的「精度, 小数位」参数。你传入的'17.2'不是合法的格式模式,导致函数无法正确识别数值格式,返回false。- 而
toDecimal(col, 17, 2)是直接指定精度和小数位进行转换,逻辑与isDecimal完全不同,因此可以正常工作。
替代校验方法
方法1:结合try和toDecimal函数(推荐)
利用toDecimal的转换能力,用try包裹捕获转换失败的情况,通过判断结果是否为null来校验是否符合指定精度的十进制类型:
try(toDecimal('121012132.12', 17, 2)) != null
- 原理:如果字符串可以转换为精度17、小数位2的decimal,
toDecimal返回对应数值;转换失败时try会返回null,通过判断非空即可验证有效性。
方法2:正确使用isDecimal的格式模式
根据你的数值格式(整数9位+小数2位,无千分位),传入匹配的格式模式字符串:
isDecimal('121012132.12', '#########.##')
或者更通用的带千分位的格式(支持任意整数长度+2位小数):
isDecimal('121012132.12', '#,##0.00')
- 注意:如果你的数值使用逗号作为小数点分隔符,需要同步调整格式模式中的小数点为逗号,比如
'#,##0,00'。
方法3:正则表达式匹配
通过正则表达式直接校验字符串是否符合十进制格式规则,比如限制整数部分最多15位(对应精度17、小数2位:17-2=15)、小数部分最多2位:
matches('121012132.12', '^\\d{1,15}(\\.\\d{1,2})?$')
- 可根据实际需求调整正则规则,比如允许负数、千分位等。
内容的提问来源于stack exchange,提问作者Vitor
相关产品推荐
相关产品推荐

