2013-03-08 22 views
0

我在我的數據庫中的列有看起來像XYZ-13-1234-12345-6789-1查找秒鐘後字符字符串中使用T-SQL

我想現場連字符最後位置返回字符串XY-6789-1,所以我消除了13-1234-12345。我知道如何使用SUBSTRING獲取第一個字符,並使用SUBSTRING(RTRIM(myString),LEN(myString),1)獲得最後一個字符。

我試過使用REVERSE,但它向後返回數字,所以而不是得到6789我得到9876,這將無法正常工作。

這是我到目前爲止所瞭解到的......它完美的工作,但它看起來很糟糕!

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 

回答

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) 

還沒那麼偉大,但可能更容易比你原來的解決方案閱讀。

+0

嗨喬迪,問題的一部分是,我不會總是有一個固定的金額在第一或最後一節。即使在一個字符串中有'XYZABC',而另一個字符串中有'XY',我也只需要'XY'。這是討厭的,但我知道了....看到上面。 – user2146538 2013-03-08 01:44:32

+0

我更新了我的原始答案。你可能會發現這個解決方案不那麼複雜。 – JodyT 2013-03-08 02:00:05