使用带有列名的SUBSTRING

时间:2015-10-01 12:18:54

标签: sql sql-server-2008

我整个上午都在尝试这个,但却无法找到我做错的事。我有一个字符串,' XXYY0000'我需要XX和YY分开。

所以这可行并获得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,参数数据类型numeric无效。

为什么数据类型对SUBSTRING函数很重要,而对LEFT函数不重要?

1 个答案:

答案 0 :(得分:1)

<强> LEFT

  

LEFT(character_expression,integer_expression)

     

一个character_expression

     

是字符或二进制数据的表达式。 character_expression可以是常量,变量或列。 character_expression可以是   可以隐式转换的任何数据类型,text或ntext除外   to varchar或nvarchar 。否则,请明确使用CAST函数   转换character_expression。

<强> SUBSTRING

  

SUBSTRING(表达式,开始,长度)

     

表达

     

是字符,二进制,文本,ntext或图像表达。

LEFT隐含CASTSUBSTRING没有隐含CAST。您需要手动SELECT SUBSTRING(CAST(l.LOAN_MATURITY AS VARCHAR(100)), 3, 2) FROM LOAN As l

Clear()