gjfvip123 2017-05-10 01:19 采纳率: 0%
浏览 394

求大神解释一下这句sql语句,谢谢。

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
我这么分析的对吗?请大神指点,谢谢

  • 写回答

1条回答

  • 小杰911 2023-06-14 09:42
    关注

    您的理解基本正确,这里是对您的解释:

    • CAST函数是将字符串转换为数字类型,这里是将"12/"转换为数字时会报错,因为"/"不能转换为数字,所以整个表达式会返回NULL。
    • END是CASE WHEN语句的结束符号,用于表示条件分支结束。
    • WHERE语句是对查询结果进行筛选的条件,这里是表示只有sizeP不为空格时才会进行计算。
    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程