0

我的数据库中有一个列,其字段看起来像 XYZ-13-1234-12345-6789-1

我想返回字符串 XY-6789-1,所以我要删除 13-1234-12345。

我知道如何使用 SUBSTRING 来获取第一个字符,并且我使用 SUBSTRING(RTRIM(myString), LEN(myString), 1) 来获取最后一个字符。

我尝试使用 REVERSE,但它会向后返回数字,所以我得到 9876 而不是得到 6789,这不起作用。

这是我到目前为止所想出的……它工作得很好,但看起来很糟糕!

SUBSTRING(LTRIM(RTRIM(myString)), 1, 2) + '-' + REVERSE(SUBSTRING(REVERSE(LTRIM(RTRIM(myString))), (CONVERT(INT, CHARINDEX('-', REVERSE(LTRIM(RTRIM(myString))))) + 1), CONVERT(INT, CHARINDEX('-', (SUBSTRING(REVERSE(LTRIM(RTRIM(myString))), (CONVERT(INT, CHARINDEX('-', REVERSE(LTRIM(RTRIM(myString))))) + 1), LEN(myString))))) - 1)) + '-' + SUBSTRING(LTRIM(RTRIM(myString)), LEN(myString), 1) AS NewColumnFormat
4

1 回答 1

0

您还可以使用SQL Server Central 中的函数。使用该功能CHARINDEX2将允许您使用以下方法解决它:

SELECT LEFT('XYZ-13-1234-12345-6789-1', dbo.CHARINDEX2('-','XYZ-13-1234-12345-6789-1', 1)) + RIGHT('XYZ-13-1234-12345-6789-1', dbo.CHARINDEX2('-', REVERSE('XYZ-13-1234-12345-6789-1'), 2) - 1)

仍然不是那么好,但可能比您的原始解决方案更容易阅读。

于 2013-03-08T01:29:53.110 回答