Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли сделать запрос короче и красивие  [new]
YuriWhite
Member

Откуда: Chelyabinsk
Сообщений: 449
Собственно subj...
lcSelect = "select ";
			+"CASE WHEN LEN(RTRIM(CPROBLEM)) >= 30 THEN SUBSTRING(RTRIM(CPROBLEM),1,27)+'...' " ;
						+"ELSE SUBSTRING(RTRIM(CPROBLEM),1,30) END 	as cproblem," ;
			+"CONVERT ( varchar ,dproblem, 104)					as dproblem," ;
			+"CASE WHEN LEN(RTRIM(CRESOLVE)) >= 30 THEN SUBSTRING(RTRIM(CRESOLVE),1,27)+'...' " ;
						+"ELSE SUBSTRING(RTRIM(CRESOLVE),1,30) END 	as cresolve," ;
			+"CONVERT ( varchar ,dresolve, 104) 					as dresolve," ;
			+"bdone," ;
			+"cdone ";
		+"from TD_T_LIST"

17 авг 04, 12:54    [886885]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
это вопрос про MS SQL Server???

для спящего время бодрствования равносильно сну
17 авг 04, 12:59    [886913]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
YuriWhite
Member

Откуда: Chelyabinsk
Сообщений: 449
Ну если запросы к MSSQL - к MSSQL не относятся то извеняйте...
17 авг 04, 13:03    [886939]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, если LEFT(бла-бла-бла, 27) короче SUBSTRING(бла-бла-бла, 1, 27), то и поменяй этот субстринг на лефт, например...
17 авг 04, 13:06    [886953]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
Glory
Member

Откуда:
Сообщений: 104760
А зачем проверять длину столбца ?
Имхо можно сразу CAST(CPROBLEM as varchar(30))

Ну если запросы к MSSQL - к MSSQL не относятся то извеняйте...

Из вашей постановки вопроса это не видно
17 авг 04, 13:09    [886974]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
YuriWhite
Member

Откуда: Chelyabinsk
Сообщений: 449
2Glory
Сорри...,
но мне нужно если столбец >= 30 он усекался до 27 симовлов + '...', ежели меньше то усекался до 30.
17 авг 04, 13:12    [886990]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Тогда короче не сделаешь.
17 авг 04, 13:13    [886999]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Хотя
select left(name, case len(rtrim(name)) when 8 then 5 else 6 end) from sysobjects
17 авг 04, 13:17    [887021]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Еще немного поизвращаюсь :)
select left(name, 5+sign(len(rtrim(name))%8)*2) from sysobjects
17 авг 04, 14:45    [887482]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
WiRuc
Member

Откуда: Воронеж
Сообщений: 1280
Чтобы было покрасивше, можно определить ф-цию для усечения строки и вызывать уже ее в селекте.

create function dbo.uf_truncstr (@str varchar(8000))
returns varchar(30)
as
begin
return (CASE WHEN LEN(RTRIM(@str)) >= 30 THEN LEFT(RTRIM(CPROBLEM),27)+'...' ELSE RTRIM(CPROBLEM) END)
end

select dbo.uf_truncstr(cproblem), dbo.uf_truncstr(cresolve) from TD_T_LIST

.P.S. Кстати, а почему в условии >=, а не просто =, ведь если размер строки равен 30, то и обрезать ее не нужно.
17 авг 04, 15:15    [887653]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать запрос короче и красивие  [new]
Guest_12
Guest
И зачем извращаться:)

declare @pos int
select @pos = 12

select
 isnull(stuff(name, @pos + 1, len(name) - @pos, '...'), name)
from
 sysobjects
17 авг 04, 17:16    [888271]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить