- ベストアンサー
SUBSTRING 関数に渡した長さのパラメータが無効です。
●サーバー機 DB:SQLServer2005 OS:WindowsServer2003 ●クライアント機 OS:WindowsXP SP3 住所テーブル(ADDRESS)の項目のひとつである電話番号(TELNO)を 特定の記号で3つの別項目として取得したいのですが クライアント機の SQL Server Management Studio にてクエリを実行すると 「SUBSTRING 関数に渡した長さのパラメータが無効です。」 以上のようなエラーが発生します。 電話番号の項目は文字型の項目で、実際のデータとしては 例:(01)2345-6789 (0123)45-6789 (01234)5-6789 こんな感じで市外局番の前後に必ず"(" ")"が付いており"-"も必ず付いた状態です。 ただし、市外局番、ハイフンの前後の番号の桁数に決まりはありません。 ※市外局番5桁、ハイフン前4桁、ハイフン後4桁という最大桁数の制限はあり。 【実行したクエリ】 Select SUBSTRING(TELNO, CHARINDEX('(',TELNO)+1, CHARINDEX(')',TELNO)-CHARINDEX('(',TELNO)-1) AS TELNO1 , SUBSTRING(TELNO, CHARINDEX(')',TELNO)+1, CHARINDEX('-',TELNO)-CHARINDEX(')',TELNO)-1) AS TELNO2 , SUBSTRING(TELNO, CHARINDEX('-',TELNO)+1, 5) AS TELNO3 From ADDRESS エラーメッセージの通り、SUBSTRING関数のパラメータの内容が長すぎるのが原因のようですが いろいろ調べてみたのですが別の書き方が見つけられず困っている状態です。 何かいい方法はないものでしょうか?(別の関数を使用する等々) ※ストアドプロシージャで処理するのではなく1本のクエリで結果が得られるのが望ましいです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
補足
>charですか? >それともvarcharですか? char型の14桁の項目です。 >得たい結果を示しましょう。 (01)2345-6789 が入っていた場合 TELNO1 として 01 TELNO2 として 2345 TELNO3 として 6789 を取得したいのです。 電話番号以外の項目で検索条件を付加して 対象件数を絞った時はこのエラーがでない場合があります。 ※この住所テーブルの件数は現状で7万件ほどあります。 (情報後出しのようになってしまい申し訳ないです。)