我整个上午都在尝试这个,但却无法找到我做错的事。我有一个字符串,' 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
函数不重要?
答案 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
隐含CAST
,SUBSTRING
没有隐含CAST
。您需要手动SELECT SUBSTRING(CAST(l.LOAN_MATURITY AS VARCHAR(100)), 3, 2)
FROM LOAN As l
:
Clear()