sql >> データベース >  >> RDS >> Sqlserver

SQL SERVER の TRANSLATE 関数

    編集:

    私はばかげていると感じています-MatBailieは私の元の解決策が間違っていることを正しく指摘しました。 TRANSLATE('abc', 'abc', 'bcd') ddd を返すはずでしたが、SQL Server 2017 の TRANSLATE をテストした後、「bcd」が正しい答えであることがわかりました。この投稿の履歴を見ると、私のオリジナル (間違ったバージョン) を確認できます。 ngrams8k を使用する更新されたソリューションを次に示します。 :

    DECLARE
      @string varchar(8000)  = 'abc',
      @fromChar varchar(100) = 'abc', -- note: no mutation
      @toChar varchar(100)   = 'bcd';
    
    SELECT newString = 
    (
      SELECT CASE WHEN x>z THEN '' WHEN x>0 THEN s ELSE t END+''
      FROM dbo.ngrams8k(@string,1) ng
      CROSS APPLY (VALUES (charindex(ng.token,@fromChar),len(@toChar),ng.token)) x(x,z,t)
      CROSS APPLY (VALUES (ng.position, substring(@toChar,x.x,1))) xx(p,s)
      ORDER BY xx.p
      FOR XML PATH(''), TYPE
    ).value('(text())[1]', 'varchar(8000)');
    

    返品> bcd



    1. クライアントとサーバー間の接続の構成Oracle10g

    2. PostgreSQL:psqlコマンドを使用してPostgresインスタンスにリモート接続する

    3. Symfony2のDoctrine2:どのオブジェクト呼び出しがクエリにつながるかをどうやって見ることができますか?

    4. MySQLでDATETIMEからDATEとTIMEを分離する方法