【发布时间】:2021-03-02 04:49:59
【问题描述】:
谁能告诉我哪里出错了,我似乎无法提取第四个单词 CCC,尝试了所有方法,不想将其放入表中,只是在选择中返回子字符串?
DECLARE @ProductCode VARCHAR(256)
SET @ProductCode = 'CCCC-DDDDDDD-AAA-CCC-BBBBB'
SELECT LEFT(@ProductCode,CHARINDEX('-',@ProductCode) - 1) AS CHAR1,
SUBSTRING(@ProductCode,CHARINDEX('-',@ProductCode) + 1,
CHARINDEX('-',@ProductCode,CHARINDEX('-', @ProductCode) + 1) - (CHARINDEX('-',@ProductCode) + 1)) AS CHAR2,
SUBSTRING(@ProductCode,CHARINDEX('-',@ProductCode,CHARINDEX('-',@ProductCode) + 1) + 1,
DATALENGTH(@ProductCode) - CHARINDEX('-', @ProductCode,CHARINDEX('-',@ProductCode) + 1) - CHARINDEX('-',REVERSE(@ProductCode))) AS CHAR3,
SUBSTRING(@ProductCode,CHARINDEX('-',@ProductCode,CHARINDEX('-',@ProductCode), CHARINDEX('-',@ProductCode) + 1)) + 1,
DATALENGTH(@ProductCode) - CHARINDEX('-', @ProductCode,CHARINDEX('-',@ProductCode), CHARINDEX('-',@ProductCode) + 1) - CHARINDEX('-',REVERSE(@ProductCode))) AS CHAR4,
RIGHT(@ProductCode,CHARINDEX('-',REVERSE(@ProductCode)) - 1) AS LASTCHAR
GO
非常感谢
【问题讨论】:
-
帮自己一个忙,找到一个提供序数位置的字符串拆分函数。在某些时候,MS 会改进内置功能来做同样的事情。添加 TRIM 只用了 17 年。
-
而且使用datalength在逻辑上是不正确的。如果您需要处理 nvarchar 字符串,您的代码将无法正常工作。
-
您要提取的字符串是否总是在同一个位置?
标签: sql sql-server substring charindex