在sql server 2005中修改int计数结果

时间:2011-03-31 13:10:51

标签: sql-server-2005 count

我正在使用sql server 2005,我正在从特定的表中计算

SELECT count(StudentIdReference) as studentCount FROM StudentTable

现在这个select语句返回结果像2或78或790.但是将来它会迅速增长并且在UI上我没有足够的空间来显示像1000000这样的数字。 我希望在3位数后,我会得到像1K或1.6K这样的数字,正如我们在stackoverflow上看到的那样。

5 个答案:

答案 0 :(得分:1)

这在您的应用程序的表示层中更容易完成。

你可以写一个用户函数并做这样的事情......

CREATE FUNCTION prettyPrint 
(@number int)
RETURNS varchar(30)
AS
BEGIN
declare @return varchar(30)
set @return = cast(@number as varchar(3))
if @number > 1000
    set @return = ''+ cast((@number/1000) as varchar(3)) + '.' + cast((@number % 1000)/100 as varchar(3)) +'K'

-- here must be more 'exceptions' or change all this about the magic number 1000
return @return
end

select dbo.prettyPrint(1500)

SELECT prettyPrint(count(StudentIdReference)) as studentCount FROM StudentTable

答案 1 :(得分:0)

您需要编写自己的逻辑来显示此类文本。没有内置方法。

答案 2 :(得分:0)

我会从SQL Server返回COUNT,并将格式保留到UI。这是因为:
1)通常更容易/高效地在SQL之外进行格式化/字符串操作 2)使用相同查询的代码中的不同位置可能希望以不同的方式使用数据(可能不是现在,但可以在将来执行)因此返回计数as-is为您提供了灵活性 - 即不需要1个版本将计数作为INT返回,另一个返回与格式化的VARCHAR相同的

可以在SQL中执行它,但总的来说,我相信将其推入UI,因为它是一种显示/格式化行为。

答案 3 :(得分:0)

正如其他人所说,你应该在你的演示层而不是在数据库中这样做,但是,这将为你做到:

Declare @StudentCount int,
        @StudentCountFormatted varchar(10)

Select @StudentCount = Count(StudentIdReference) as studentCount FROM StudentTable


If @StudentCount > 999
    Begin

        Select @StudentCountFormatted = Convert(Varchar(10), Convert(numeric(19,1), (@StudentCount/ 1000.00))) + 'K'

    End
Else
    Begin
        Select @StudentCountFormatted = @StudentCount
    End


Select @StudentCountFormatted

答案 4 :(得分:0)

你可以尝试这样的事情

SELECT 
    CASE 
    WHEN len(cast(count(*) as varchar(10)))< 4 then cast(count(*) as varchar(10))
    WHEN len(cast(count(*) as varchar(10)))> 4 and len(cast(count(*)as varchar(10)))< 7 
            THEN cast(cast(count(*) / 1000.0 as decimal(10,1)) as varchar(10)) + 'k' 
    ELSE  cast(cast(count(*) / 1000000.0 as decimal(10,1)) as varchar(10)) + 'm'    
END StudentCount
FROM StudentTable