Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将数据类型varchar转换为float时出错 案例 当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时>0和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)为0.25和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.50和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.75和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)_Sql_Sql Server_Sql Server 2008_Ssrs 2008 - Fatal编程技术网

Sql 将数据类型varchar转换为float时出错 案例 当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时>0和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)为0.25和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.50和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.75和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)

Sql 将数据类型varchar转换为float时出错 案例 当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时>0和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)为0.25和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.50和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.75和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar),sql,sql-server,sql-server-2008,ssrs-2008,Sql,Sql Server,Sql Server 2008,Ssrs 2008,假设您希望在条件的值为0时进行添加,他们会这样做: CASE WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(C

假设您希望在条件的值为0时进行添加,他们会这样做:

CASE
WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.25 THEN (0.25+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.25 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.50 THEN (0.50+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.50 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.75 THEN (0.75+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.75 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<1 THEN (1+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))


WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))= 0 THEN (0+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

END

AS Estimated_Effort_Days,
案例
当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时=0,则
“未知号码”

当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时>0和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)为0.25和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.50和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.75和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)假设您希望在条件的值为0时进行添加,他们会这样做:

CASE
WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.25 THEN (0.25+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.25 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.50 THEN (0.50+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.50 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.75 THEN (0.75+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.75 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<1 THEN (1+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))


WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))= 0 THEN (0+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

END

AS Estimated_Effort_Days,
案例
当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时=0,则
“未知号码”

当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时>0和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)为0.25和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.50和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)0.75和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)您不能期望有一个列,其中有时值是varchar和其他时间float,因此您可以将整个结果转换为nvarchar,如:

CASE

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))=0 THEN 
"unknown number"


WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.25 THEN (0.25+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.25 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.50 THEN (0.50+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.50 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.75 THEN (0.75+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.75 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<1 THEN (1+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))


WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))= 0 THEN (0+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

END

AS Estimated_Effort_Days,
案例
当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时=0
然后强制转换(“未知号码”为nvarchar)

当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时>0和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)您不能期望有一个列,其中有时值是varchar和其他时间float,因此您可以将整个结果转换为nvarchar,如:

CASE

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))=0 THEN 
"unknown number"


WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.25 THEN (0.25+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.25 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.50 THEN (0.50+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.50 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.75 THEN (0.75+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0.75 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<1 THEN (1+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))


WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))= 0 THEN (0+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))

END

AS Estimated_Effort_Days,
案例
当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时)-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时=0
然后强制转换(“未知号码”为nvarchar)
当(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar)时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时>0和(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar时-地板(转换(十进制(10,2)、(totaleffort/7.40))为nvarchar))为什么不只是:

CASE
    WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))=0 
    THEN cast('unknown number' as nvarchar)
    WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.25 
    THEN CAST((0.25+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar))) as nvarchar)
观察:

为什么不更改
(表达式)>0和(同一表达式)为什么不只是:

CASE
    WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))=0 
    THEN cast('unknown number' as nvarchar)
    WHEN (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))> 0 AND (Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)- FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar)))<=0.25 
    THEN CAST((0.25+FLOOR(Cast(CONVERT(DECIMAL(10,2),(totaleffort/7.40)) as nvarchar))) as nvarchar)
观察:


为什么不更改
(表达式)>0和(同一表达式)我注意到,提供的两个答案都在子句的“When”部分进行转换,而没有将比较值转换为nvarchar。这可能是您仍然看到提供的代码错误的原因

我建议您在'When'子句中单独保留数据类型(看起来'correct'比较是数字的),但是所有'Then'/'Else'结果都需要转换为字符类型,因为SQL不能在同一列中混合和匹配数据类型


只是一点额外的投入……超出了问题的范围,我意识到:-)如果这是针对报表,我建议更改报表接口,而不是更改SQL。将数据类型单独保留在视图/过程/函数级别将使数据结构更加可重用/可扩展,并且应使用零值的计算/聚合将按预期运行,而无需“反向转换”。如果必须更改SQL端而不是界面端,我建议在SQL端结构中同时包含“report pretty”和“actual value”列,这样您就不会因为删除零值和更改数据类型而丢失任何功能。

我注意到,提供的两个答案都在子句的“When”部分中进行转换,而没有任何更改将比较值也转换为nvarchar。这可能就是为什么您仍然看到提供的代码出现错误的原因

我建议您在'When'子句中单独保留数据类型(看起来'correct'比较是数字的),但是所有'Then'/'Else'结果都需要转换为字符类型,因为SQL不能在同一列中混合和匹配数据类型

只是一点额外的输入…超出了问题的范围,我意识到:-)如果这是针对报表的,我建议更改报表接口,而不是更改SQL。保留数据类型