tsql与float和varchar合并

时间:2012-10-17 18:03:56

标签: sql sql-server-2008 tsql

我有一个浮动字段,显示数据:

1
1.00
3.12
3.00

我还有一个varchar字段,显示如下:

NA
ND 
I

数据是这样的:Fld_N是浮点数,Fld_S是varchar

Fld_N   Fld_S
-----   ------
1 
        ND
1.00    
3.12
3
       NA
       I

请注意,一行可以包含Fld_N或Fld_S的值,但不能同时包含两者。

我正在做的是使用coalesce:

    COALESCE(STR(Fld_N,9,2), Fld_S)  Fld

这不太好用,因为我的小数点总是高达2个小数点,而我需要它支持显示1和1.00。有没有办法不指定小数点,仍然适合在我的例子中显示1和1.00?

3 个答案:

答案 0 :(得分:1)

尝试转换功能:

coalesce(convert(varchar,Fld_N),Fld_S)Fdl

答案 1 :(得分:0)

在浮点类型列中,11.00之间绝对没有区别。因此,你的建议实际上是不可能的。存储在数据库中的第1行和第3行的数据实际上是相同的。


但是,您可以转换为VARCHAR而不是使用STR,它将使用所需的最小小数位数:

COALESCE(CAST(fld_N AS VARCHAR(12)), Fld_S) AS Fld

这应该产生:

Fld
-----
1 
ND
1    
3.12
3
NA
I

答案 2 :(得分:0)

而不是STR,请使用

CAST(fld_N AS VARCHAR(9))

VARCHAR只会根据需要使用尽可能多的小数位数来显示您提供的值。

将它放入COALESCE会产生:

COALESCE(CAST(fld_N AS VARCHAR(9)), Fld_S) AS Fld