15

Telephone現在、次のようなエントリを持つテーブルがあります。

9073456789101
+773456789101
0773456789101

私がやりたいのは、そこに 9 があるすべてのエントリの先頭から 9 だけを削除し、他のエントリはそのままにしておくことです。

どんな助けでも大歓迎です。

4

7 に答える 7

3

私は最近、RIGHT()、LEN()、PATINDEX() の組み合わせで同様の問題を解決しました。PATINDEX は、最初の文字が 9 の場合は整数 1 を返し、それ以外の場合は 0 を返します。このメソッドを使用すると、CASE WHEN ステートメントを使用せずにすべてのレコードを一度に返すことができます。

SELECT
    RIGHT(number, LEN(number) - PATINDEX('9%', number))
FROM Telephone
于 2020-02-25T16:57:26.223 に答える
0

スタッフはこれに最適な機能です。ただし、where 句を含む update ステートメントで使用するのは素晴らしいことですが、挿入を行っていて、1 回のパスですべての行を挿入する必要がある場合はどうでしょうか。以下は、最初の文字がピリオドの場合は削除し、遅い case ステートメントを使用せず、null を空の文字列に変換します。

DECLARE @Attachment varchar(6) = '.GIF',
        @Attachment2 varchar(6)

SELECT
  @Attachment2 = ISNULL(ISNULL(NULLIF(LEFT(@Attachment, 1), '.'), '') + STUFF(@Attachment, 1, 1, ''), '')

SELECT
  @Attachment2
于 2016-04-28T22:51:37.090 に答える
0
DECLARE @STR nvarchar(200) = 'TEST'
SET @STR = STUFF(@STR,1,1,'')
PRINT @STR

結果は「EST」になります

于 2015-11-05T04:30:26.367 に答える