0

データベースに、XYZ-13-1234-12345-6789-1 のようなフィールドを持つ列があります。

文字列 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
4

1 に答える 1

0

SQLServerCentralの関数を使用することもできます。この関数を使用すると、次のコマンドを使用して関数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 に答える