0

[Work Phone] (nvarchar) 列を含むテーブルがあります。このデータベースを使用するソフトウェアでは、ユーザーが任意の文字を入力できるため、多くの列に「555-555-5555 Ext. 1234 Bob Jones」のようなものが含まれていました。必要なのは数字だけで、Phone と Ext を別々の列に分割するつもりです。関数といくつかの他のことを実行した後、電話番号と内線番号だけになりました。すべてのスペースと文字が削除されています (例: 55555555551234)。

これを分割しようとしている方法では、最初にフィールド内の文字の総数 (私の例では14 ) を数えて拡張機能を取得し、その数を 10 減らします (内の文字の総数)電話番号(国番号を除く))。拡張子は 1 ~ 5 文字の間のどこにでもある可能性があるため、LEN() を使用してこのカウントを取得し、10 減らします。

SELECT RIGHT([Table].[Column], LEN([Table].[Column]) -10)
FROM [Table]

「無効な長さパラメーターが RIGHT 関数に渡されました」というメッセージが表示されます。

次のようなことをすると、問題が完全にはわかりません。

SELECT LEN([Table].[Column]) -10
SELECT LEN('55555555551234') -10

期待どおり、値 4 を取得します。

このパラメーターを RIGHT に渡して、必要なものを取得できるようにする適切な方法は何ですか?

4

4 に答える 4

0

10 を引くとマイナスになることがあるため、エラーが発生しています。その周りに case ステートメントを配置する必要があります。

すなわち。

SELECT 
  RIGHT([TABLE].[Column], 
    CASE when LEN([TABLE].[Column])-10 >= 0 then 
        LEN([TABLE].     [Column])-10 
    ELSE LEN([TABLE].[Column]) 
    END) 
FROM [TABLE] 

もちろん、CASE を使用する方法は他にもあります。これは、エラーが発生している場所を示すための例にすぎません ;)

于 2013-04-03T13:59:32.597 に答える