1

これは私の最初の投稿であり、開発の初心者でもあります。いずれにせよ..私の問題は次のとおりです。

SQL ステートメント:

SELECT left(clienti.SedeLegaleIndirizzo, patindex('%[0-9]%',clienti.SedeLegaleIndirizzo))
AS indirizzo from Clienti

clienti.SedeLegaleIndirizzoclientiテーブルで、SedeLegaleIndirizzoはストリートと番号を含むアドレスの列です。通りを番号から分離したいのですが、私のステートメントでは、最初の番号で通りを取得します。charindex からわかるように、最後のパラメーターに -1 を追加できますが、問題は、そのパラメーターを patindex で配置すると、このエラーが返されることです。

Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.

数値を検索しているため、charindex ではなく patindex を使用しています...

誰かの提案は何ですか?

4

2 に答える 2

1

どこに配置しているのかは完全にはわかりませんが、-1これを行っているようです:

SELECT left(clienti.SedeLegaleIndirizzo,
        patindex('%[0-9]%', clienti.SedeLegaleIndirizzo)-1)

これにより、番号が見つからない場合に問題が発生しpatindex()ます。with lengthを持つことはできません。これらの場合の私の解決策は次のとおりです。00-1=-1left()-1

SELECT left(SedeLegaleIndirizzo,
        isnull(nullif(patindex('%[0-9]%', SedeLegaleIndirizzo)-1, -1), 0))

これにより、番号が見つからない場合、left(SedeLegaleIndirizzo, -1)コードを実行しようとする代わりに、結果としてleft(SedeLegaleIndirizzo, 0)空の文字列が返されることが保証されます。

于 2015-01-26T09:39:45.643 に答える
0

エラーが発生する理由は、数値のない行が原因である可能性が高く、結果がpatindex(...) -1負になる可能性があります。

1 つの解決策は、これらの行を除外することです。

SELECT LEFT(clienti.SedeLegaleIndirizzo, PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) - 1) 
AS indirizzo FROM Clienti
WHERE PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) > 0
于 2015-01-26T09:40:30.967 に答える