2011-03-31 53 views
0

我工作的SQL Server 2005上,我從一個特定的表走數在SQL服務器數量的修改INT結果2005

SELECT count(StudentIdReference) as studentCount FROM StudentTable 

眼下這個SELECT語句返回我造成像2或78或790 。但在未來它將快速增長,並在用戶界面我沒有足夠的空間來顯示數字像1000000. 我想要的3位數後,我會得到像1K或1.6K的數字,就像我們看到的堆棧溢出。

+4

處理您的格式要求表示層,不在數據庫中。 – 2011-03-31 13:13:04

+0

@Joe Stefanelli你可以給我一個想法如何做到這一點。我的意思是,如果我得到像1009090那樣的int,那麼我將如何轉換它? – Chris 2011-03-31 13:16:47

回答

0

正如其他人說你應該在你的表示層不是在DB這樣做,但是,這是不行的它爲您提供:

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 
0

您需要編寫自己的邏輯來顯示此類文本。沒有內置的方法。

+0

你可以請我建議我如何實施?我的意思是我必須寫什麼邏輯? – Chris 2011-03-31 13:17:32

+0

@Chris其他人已經給你了示例代碼 – 2011-03-31 13:32:11

0

我會回來的,是從SQL Server的次數和離開格式化到UI。這是因爲:
1)通常SQL外部容易/高性能做格式化/字符串操作
2)在你的代碼不同的地方使用相同的查詢可能想不是現在使用的以不同的方式(該數據可能,但可能做未來的),所以返回的計數爲,是爲您提供了靈活性 - 即不會需要1版返回計數爲INT和另一返回相同的格式化VARCHAR

可以做在SQL中,但總的來說,我相信將它推入到UI中是因爲它是一種顯示/格式化行爲。

1

這將是簡單的在應用程序的表示層來完成。

你coud寫用戶功能,做這樣的事情....

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 
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