Cast(SUBSTRING(sizeP,0,CHARINDEX('/',sizeP)) as decimal)/Cast(SUBSTRING(sizeP,CHARINDEX('/',sizeP)+1,len(sizeP)) as decimal) end where LEN(rtrim(sizeP)) > 0
假设sizeP = 12/3
我的理解是
CHARINDEX('/',sizeP) 从 12/3中 找‘/’的位置 是3;
SUBSTRING(sizeP,0,CHARINDEX('/',sizeP) 从12/3中0的位置,选取3个字符 12/
Cast 12/ as decimal 这个不理解,转为decimal的结果是12还是报错呢? 如果是12的话后边的语句才能解释的通。
len(sizeP) 得到字符串长度 4
CHARINDEX('/',sizeP)+1 找12/3中 ‘/'+1的位置的内容, 4
SUBSTRING(sizeP,CHARINDEX('/',sizeP)+1,len(sizeP) 在12/3中 查找第4个字符的位置,截取4个长度的字符, 还是3, (3是 12/3 的最后一个字符,截取4个字符等于只截取了1个字符,后边3个字符没有)
end : 前边sql语句没打完, 应该是case ... else.... end 的语句结束的意思吧?
where LEN(rtrim(sizeP)) > 0 rtrim(sizeP)是去除12/3右边的空格 ;也就是sizeP的长度>0时,前边的sql语句生效。
整段的意思就是 通过 查找"/" 在sizeP中的位置 ,用前边的字符串除以后边的字符串,最后得出数值,像这个例子,就是12除以3,得4
我这么分析的对吗?请大神指点,谢谢
这个SQL语句使用了SUBSTRING函数来提取字符串中的子字符串,并使用CAST函数将其转换为数字类型。然后,使用WHERE子句来筛选出长度大于0的子字符串,并使用/运算符将其转换为小数类型。
具体来说,这个SQL语句的作用是从一个字符串中提取出子字符串,并将其转换为小数类型。其中,sizeP是要提取子字符串的字符串,CHARINDEX函数用于获取子字符串中的第一个/字符的位置,LEN函数用于获取子字符串的长度,SUBSTRING函数用于提取子字符串,CAST函数用于将子字符串转换为数字类型。
最后,使用WHERE子句来筛选出长度大于0的子字符串,并使用/运算符将其转换为小数类型。