1

"Test One"T-SQL を使用して、になる最も簡単な方法を見つけようとしています"One, Test"

基本的に、列にスペースを挟んで 2 つの単語しかない場合は、" " と ", " を入れ替えます。

例えば:

Before             After
Test One           One, Test
Test Two One       Test Two One
Test, Three        Test, Three
4

3 に答える 3

6

これはどう:

select col Before,
  case 
    when col like '%,%' then col 
    when len(replace(col, ' ', '')) = len(col) -1 
      then reverse(substring(reverse(col), 1, charindex(' ', reverse(col))-1))+', '+substring(col, 1, charindex(' ', col)-1)
    else col
  end  After
from yourtable

SQL Fiddle with Demoを参照してください。結果は次のとおりです。

|       BEFORE |        AFTER |
-------------------------------
|     Test One |    One, Test |
| Test Two One | Test Two One |
|  Test, Three |  Test, Three |
于 2013-01-14T19:40:00.593 に答える
2

SQL フィドル

DECLARE @Tests TABLE (
    Before VARCHAR(50)
)

INSERT INTO @Tests Values ('Test One')
INSERT INTO @Tests Values ('Test Two One')
INSERT INTO @Tests Values ('Test, Three')

SELECT
    Before,
    CASE 
        WHEN 
            -- If there is no comma...
            CHARINDEX(',', Before) = 0
            -- And if there is only one space... 
            AND CHARINDEX(' ', RIGHT(Before, LEN(Before) - 
                CHARINDEX(' ', Before))) = 0
        THEN 
            -- Then perform the swap.
            RIGHT(Before, LEN(Before) - CHARINDEX(' ', Before)) + ', ' 
            + LEFT(Before, CHARINDEX(' ', Before))
        -- Otherwise, retain the "before" value.
        ELSE Before
    END AS After
FROM @Tests
于 2013-01-14T19:43:02.723 に答える
0

これが私の見解です:多くの文字列関数を静かに使用するため、最高ではありません...

  • 仮定:

    1. 言葉が 2 つしかないこと ;)

    2. スペース/または文字があります...

  • SQLFIDDLE デモ

コード:

SELECT CHARINDEX(' ',name) splitposition,
SUBSTRING(name, 1, CHARINDEX(' ',name)-1) firstword,
SUBSTRING(name, CHARINDEX(' ',name), len(name)) lastword,
(SUBSTRING(name, CHARINDEX(' ',name), len(name)) +
', ' + SUBSTRING(name, 1, CHARINDEX(' ',name)-1)) as swapped
from moneys;

結果:

| SPLITPOSITION | FIRSTWORD | LASTWORD |   SWAPPED |
----------------------------------------------------
|             5 |      test |      one |  one, test |

ps: デモ用に SQL サーバーの古いテーブルを使用しました。

于 2013-01-14T19:37:00.283 に答える