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语句,谢谢。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 小杰911 2023-06-14 09:42关注
您的理解基本正确,这里是对您的解释:
- CAST函数是将字符串转换为数字类型,这里是将"12/"转换为数字时会报错,因为"/"不能转换为数字,所以整个表达式会返回NULL。
- END是CASE WHEN语句的结束符号,用于表示条件分支结束。
- WHERE语句是对查询结果进行筛选的条件,这里是表示只有sizeP不为空格时才会进行计算。
解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!