Изменить результат int в sql server 2005 - PullRequest
0 голосов
/ 31 марта 2011

Я работаю на SQL Server 2005, и я беру счет из определенной таблицы

SELECT count(StudentIdReference) as studentCount FROM StudentTable

Прямо сейчас этот оператор выбора возвращает мне результат, например, 2 или 78 или 790. Но в будущем он будет быстро расти, и в пользовательском интерфейсе у меня не будет достаточно места, чтобы показать цифру, например, 1000000. Что я хочу, чтобы после 3 цифр я получал число, подобное 1К или 1,6К, как мы видим в stackoverflow.

Ответы [ 5 ]

1 голос
/ 31 марта 2011

Это было бы проще сделать на уровне презентации вашего приложения.

Вы можете написать пользовательскую функцию и сделать что-то вроде этого ...

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 голосов
/ 31 марта 2011

Вы всегда можете попробовать что-то вроде этого

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
0 голосов
/ 31 марта 2011

Как уже говорили другие, вы действительно должны делать это на уровне презентаций, а не в БД, однако, это сделает это за вас:

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 голосов
/ 31 марта 2011

Я бы вернул COUNT как есть с SQL Server и оставил форматирование до пользовательского интерфейса.Это потому что:1) обычно проще / быстрее выполнять форматирование / манипуляции со строками вне SQL2) разные места в вашем коде, использующие один и тот же запрос, могут захотеть использовать данные по-разному (возможно, не сейчас, но могли бы сделать это в будущем), поэтому возвращение счетчика «как есть» дает вам такую ​​гибкость - то есть не потребуется 1 версиячтобы вернуть счет как INT, а другой, чтобы вернуть то же самое, что и отформатированный VARCHAR

Вы могли бы сделать это в SQL, но в целом я верю, что это нужно передать в UIповедение отображения / форматирования.

0 голосов
/ 31 марта 2011

Вам нужно написать собственную логику, чтобы показать такой текст.Нет встроенного метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...