SQL合并STR会产生一个INT

SQL合并STR会产生一个INT,sql,sql-server-2008,Sql,Sql Server 2008,我有以下资料: Select tp.PH_F pHF, COALESCE(STR(tp.pH_F), tp.pH_S) pH From tblprod tp PHF PH --- --- 7.256 7.256 7.59 7.59 请注意,PH_F是一个浮子 我得到以下结果 PHF PH --- --- 7.256 7 7.59 8 为什么STR将int转换为Coalesce结果是int?我喜欢发生的是让它具有相同的价值 我喜欢发生

我有以下资料:

    Select tp.PH_F pHF, COALESCE(STR(tp.pH_F), tp.pH_S) pH
     From tblprod tp
PHF    PH
---    ---
7.256   7.256
7.59   7.59
请注意,PH_F是一个浮子

我得到以下结果

PHF    PH
---    ---
7.256   7
7.59   8
为什么STR将int转换为Coalesce结果是int?我喜欢发生的是让它具有相同的价值

我喜欢发生以下事情:

    Select tp.PH_F pHF, COALESCE(STR(tp.pH_F), tp.pH_S) pH
     From tblprod tp
PHF    PH
---    ---
7.256   7.256
7.59   7.59

我怎么能让这种情况发生在联合体上

您需要告诉它您需要小数位数。STR函数默认为0。看看

您可能希望将代码更改为以下内容:

Select tp.PH_F pHF, COALESCE(STR(tp.pH_F, 5, 2), tp.pH_S) pH
     From tblprod tp

您是否尝试过将STR()放在tp.pH_S周围?结果的所需数据类型是什么?一根绳子?或者一个
十进制(n,2)
就可以了?@adam-tp.pH\S已经是一个string@MartinSmith-如果小数点是7.256中的.xxx s,会发生什么?当?我没有提出任何建议,我仍在努力了解你的要求。从您的其他注释来看,您似乎正在尝试将其转换为字符串,并保留所有小数位数,直到它们全部变为零?如果是这样的话,在SQL中这样做可能会很痛苦,尤其是对于浮点数据类型,因为它并不总是精确地四舍五入到十进制。因为它是一个浮点,所以我们可以将它设为x位数。如何处理这个问题?尝试将十进制参数设置为最大值(16),它将为您提供最多个参数:从tblprod tp中选择tp.PH_F pHF、COALESCE(STR(tp.PH_F,5,16)、tp.PH_S)PH