2015-10-01 4 views
0

Я пробовал это все утро и не могу найти то, что я делаю неправильно. У меня есть строка «XXYY0000», и мне нужны XX и YY отдельно.Использование SUBSTRING с именем столбца

Так это работает и получает значения XX:

SELECT LEFT(l.LOAN_MATURITY, 2) 
FROM LOAN As l 

Но почему это не работает, когда мне нужно, чтобы получить значения YY?

SELECT SUBSTRING(l.LOAN_MATURITY, 3, 2) 
FROM LOAN As l 

Я исследовал, и это должно дать тот же результат, что и функция MID(), но это дает мне эту ошибку.

Msg 8116, Level 16, State 1, Line 1

Аргумент тип данных числовой недопустим для аргумента 1 функции подстроки.

Почему тип данных важен для функции SUBSTRING, но не функция LEFT?

+0

Почему это не работает, я не могу сказать, но это работает, когда вы бросили числовой к VARCHAR: SELECT SUBSTRING (гипсе (l.LOAN_MATURITY, как VARCHAR), 3, 2) FROM LOAN As l – Luc

+0

Какой тип данных * * 'l.LOAN_MATURITY'? –

ответ

1

LEFT:

ЛЕВЫЙ (строковое, integer_expression)

строковое

является выражением характера или двоичных данных. character_expression может быть константой, переменной или столбцом. character_expression может содержать любой тип данных, кроме текста или ntext, который может быть неявно преобразован в varchar или nvarchar. В противном случае используйте функцию CAST для явного выражения convert character_expression.

SUBSTRING:

SUBSTRING (выражение, начало, длина)

выражение

Является, двоичный, текст, NTEXT, или выражение изображения символов.

С LEFT есть неявное CAST с SUBSTRING нет. Вы должны CAST вручную:

SELECT SUBSTRING(CAST(l.LOAN_MATURITY AS VARCHAR(100)), 3, 2) 
FROM LOAN As l 
+1

Спасибо, я использовал CAST для преобразования его в varchar, работает хорошо. – BasDeBeer