SQL Server 2012中如何截取varchar字符串前15个字符?
嘿,我来帮你搞定这个SQL问题!
首先得说清楚你报错的原因:SQL Server 2012里并没有TRIM()这个内置函数,它是从SQL Server 2017版本才开始支持的。另外,你用的SUBSTR()和LENGTH()也不是SQL Server的标准函数,对应的正确函数是SUBSTRING()和LEN()。
针对你的需求,我给你两种解决方案:
方案1:直接取前15个字符(确定字段长度≥15时用)
如果能保证MarketIdentifier的长度都在15个字符以上,直接用这个最简单的写法就行,同时用LTRIM(RTRIM())替代TRIM()来去除字符串前后的空格:
SELECT SUBSTRING(LTRIM(RTRIM(MarketIdentifier)), 1, 15) AS MarketID FROM Markets;
要是你的字段本身没有前后空格,还可以简化掉LTRIM(RTRIM()):
SELECT SUBSTRING(MarketIdentifier, 1, 15) AS MarketID FROM Markets;
方案2:通用去除最后5个字符(兼容长度不足的情况)
如果有些MarketIdentifier的长度可能不足20个字符,不想因为长度不够报错的话,可以用CASE语句做个判断,确保不会出现负数的截取长度:
SELECT CASE WHEN LEN(LTRIM(RTRIM(MarketIdentifier))) > 5 THEN SUBSTRING(LTRIM(RTRIM(MarketIdentifier)), 1, LEN(LTRIM(RTRIM(MarketIdentifier))) - 5) ELSE LTRIM(RTRIM(MarketIdentifier)) -- 长度≤5时返回整个处理后的字符串 END AS MarketID FROM Markets;
同样,不需要处理空格的话可以去掉LTRIM(RTRIM()):
SELECT CASE WHEN LEN(MarketIdentifier) > 5 THEN SUBSTRING(MarketIdentifier, 1, LEN(MarketIdentifier) - 5) ELSE MarketIdentifier END AS MarketID FROM Markets;
这样就能完美满足你的需求啦!
内容的提问来源于stack exchange,提问作者user1591668




