Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 не работает substring  [new]
A_78
Guest
declare @a int
begin
set @a = ((select len(latval) from #max)-7)
select rid, substring(latval, 2, @a) from #max
end

выдает ошибку
Argument data type int is invalid for argument 1 of substring function.


что не так?
25 дек 09, 14:49    [8119211]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
а какой тип данных имеет этот самый latval
?
25 дек 09, 14:50    [8119226]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
nvarchar(50)
25 дек 09, 14:53    [8119255]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
не верю
create table #max(rid int, latval nvarchar(50))
insert into #max values(1, 'Василий Иванович')
go
declare @a int
begin
set @a = ((select len(latval) from #max)-7)
select rid, substring(latval, 2, @a) from #max
end
go
drop table #max
go

rid         
----------- --------------------------------------------------
1           асилий Ив

(1 row(s) affected)
никаких ошибок
25 дек 09, 14:56    [8119281]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Supra93
Member

Откуда:
Сообщений: 8174
A_78
nvarchar(50)

Покажи текст с
CREATE TABLE #max
25 дек 09, 14:57    [8119285]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Сервер же ясно сказал:
A_78
declare @a int
begin
set @a = ((select len(latval) from #max)-7)
select rid, substring(latval, 2, @a) from #max
end

выдает ошибку
Argument data type int is invalid for argument 1 of substring function.


что не так?
25 дек 09, 14:59    [8119302]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
A_78
set @a = ((select len(latval) from #max)-7)
Здесь я не понимаю, что должно быть, если в таблице больше одной записи

A_78
select rid, substring(latval, 2, @a) from #max
Здесь автор забыл, что @a может стать отрицательным
25 дек 09, 15:02    [8119331]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
declare @a int
begin
set @a = ((select len(latval) from #max)-7)
select rid, substring(latval, 2, @a) from #max
end


теперь на это такая ошибка:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

и результат

NULL
NULL
NULL
25 дек 09, 15:07    [8119372]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Supra93
Member

Откуда:
Сообщений: 8174
A_78
declare @a int
begin
set @a = ((select len(latval) from #max)-7)
select rid, substring(latval, 2, @a) from #max
end


теперь на это такая ошибка:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

и результат

NULL
NULL
NULL

Вам перевести? translate.google.ru
25 дек 09, 15:08    [8119378]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_79
Guest
@a отрицательным быть не может , т.к. latval всегда больше 10 знаков
25 дек 09, 15:10    [8119391]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Паганель
A_78
set @a = ((select len(latval) from #max)-7)
Здесь я не понимаю, что должно быть, если в таблице больше одной записи
Это как раз понятно - будет сообщение сервера о том,
что вернулось >1 записи в операторе присваивания, после этого - облом!
25 дек 09, 15:11    [8119397]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
select rid, substring(latval, 2, case when len(latval)>7 then len(latval)-7 else 0 end) from #max
25 дек 09, 15:11    [8119400]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
Konst_One
select rid, substring(latval, 2, case when len(latval)>7 then len(latval)-7 else 0 end) from #max


спасибо, добрый человек
25 дек 09, 15:15    [8119425]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
A_78
Konst_One
select rid, substring(latval, 2, case when len(latval)>7 then len(latval)-7 else 0 end) from #max


спасибо, добрый человек


только работает как-то криво, некоторые значения 3-х значниые получаются, хотя указано что надо 2
25 дек 09, 15:17    [8119434]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
Паганель
A_78
set @a = ((select len(latval) from #max)-7)
Здесь я не понимаю, что должно быть, если в таблице больше одной записи


а вы добавьте больше одной записи и запустите select rid, (len(latval)-7) from #max
25 дек 09, 15:20    [8119453]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Konst_One
Member

Откуда:
Сообщений: 11514


select rid, right(latval, 2) from #max

вам это что ли надо?
25 дек 09, 15:23    [8119472]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
может я вообще не у ту сторону думаю.....
задача такова:
есть строка, больше 9 символов, например абвгдиклмнопрс , тип nvarchar, мне нужно отделить последнии 5 символов(здесь нопрс), 6+7 считая с правого края(здесь получается это лм), и левый остаток (неизвестно сколько там останется)
25 дек 09, 15:24    [8119477]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
left
right
len
case

и головой подумать
25 дек 09, 15:26    [8119484]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Проходимец
Member

Откуда: Москва
Сообщений: 571
A_78
последнии 5 символов(здесь нопрс), 6+7 считая с правого края(здесь получается это лм), и левый остаток (неизвестно сколько там останется)

левый остаток от чего?

так что ли?
declare @s nvarchar(50)
set @s = '1234567890'
select @s, right(@s, 5), substring(@s, len(@s)-6, 2), left(@s, len(@s) - 7)
25 дек 09, 15:30    [8119508]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
нет, не так.
123 в вашем примере мне надо. Но нельзя использовать left, т.к. неизвестно сколько там символов
25 дек 09, 15:39    [8119551]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
формулу сами напишите сначала , что вам надо. а то что-то совсем всех запутали
25 дек 09, 15:41    [8119562]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
declare @s nvarchar(50);
set @s = '1234567890';
SELECT RIGHT(@s,5), LEFT(RIGHT(@s,7),2), REVERSE(STUFF(REVERSE(@s),1,7,''));
25 дек 09, 15:43    [8119574]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
A_78
нет, не так.
123 в вашем примере мне надо. Но нельзя использовать left, т.к. неизвестно сколько там символов


declare @s nvarchar(50)
set @s = '1234567890'
select  LEFT(@s,3)
?
25 дек 09, 15:44    [8119579]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
A_78
Guest
iap
declare @s nvarchar(50);
set @s = '1234567890';
SELECT RIGHT(@s,5), LEFT(RIGHT(@s,7),2), REVERSE(STUFF(REVERSE(@s),1,7,''));



да, сам дурак как говорится), надо было шире мыслить в их сторону REVERSE и STUFF
25 дек 09, 15:48    [8119601]     Ответить | Цитировать Сообщить модератору
 Re: не работает substring  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
A_78
iap
declare @s nvarchar(50);
set @s = '1234567890';
SELECT RIGHT(@s,5), LEFT(RIGHT(@s,7),2), REVERSE(STUFF(REVERSE(@s),1,7,''));



да, сам дурак как говорится), надо было шире мыслить в их сторону REVERSE и STUFF
Да это я так, для разнообразия!
Способов-то десятки.
25 дек 09, 15:53    [8119629]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить