2015-04-19 6 views
0

В следующем sproc у меня возникают проблемы с преобразованием моего id в bigint при возврате. Идентификатор имеет форму {letters} {numbers}, где {буквы} могут иметь длину 2 или 3 символа, а {numbers} может быть любой длины. Я пытаюсь сначала захватить числа из своего идентификатора, а затем преобразовать их в bigint и вернуть это вместо поля id. Мое понимание для SUBSTRING заключается в том, что я могу использовать PATINDEX для получения первого индекса, где встречается число, и захватить подстроку из этого индекса. Я установил длину до 50 только потому, что не знаю, как долго фактический идентификатор человека и 50 максимальная длина для [id] для начала.Ошибка преобразования varchar в bigint (CONVERT, SUBSTRING, PATINDEX)

ALTER PROCEDURE [dbo].[GetSummoner] 
    @Id varchar(50) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT 
     CONVERT(bigint, SUBSTRING([id], (PATINDEX('%[^0-9]%', [id])), 50)) AS id 
     ,[name] 
     ,[modify_date] 
     ,[profile_icon_id] 
     ,[revision_date] 
     ,[summoner_level] 
    FROM [Summoners] 
    WHERE [id][email protected] 
END 

Edit: Сообщение об ошибке: "Ошибка преобразования типа данных VARCHAR в BigInt."

+0

И какая у вас ошибка? –

+0

@ AllanS.Hansen О, извините. Ошибка в заголовке («Ошибка преобразования типа данных varchar в bigint.») –

+0

И будет ли идентификатор «AA12345678» примером @ID, который создает проблему? –

ответ

0

Вы используете неправильный PATINDEX. удалите символ ^. Кроме того, всякий раз, когда вы сталкиваетесь с такими проблемами, простой способ отладки - это запустить выбор без преобразования и посмотреть, что вы получаете.
CONVERT(bigint, SUBSTRING([id], (PATINDEX('%[0-9]%', [id])), 50)) As id

+0

Да, это ошибка. Спасибо! Я не обязательно новичок в SQL, но PATINDEX был для меня чем-то новым. Я схватил другое решение из поиска Google и предположил, что он будет работать в моем случае. Виноват! –

+0

Тогда, пожалуйста, примите ответ, чтобы другие люди знали, что проблема решена. –

+0

Я не могу. Есть 15 минут льготного периода, прежде чем я могу. Но я буду! –

Смежные вопросы