1

フィールドの後にまだスペースが残っているというこのステートメントの何が問題になっていますか。これにより、WHENステートメントを組み合わせた構文がオフになっていると思います。私の上司は、それらを1つのステートメントにまとめることを望んでいます。私は何が間違っているのですか?

Case WHEN LTRIM(RTRIM(cSHortName))= '' Then NULL 
     WHEN cShortname is NOT NULL THEN 
       REPLACE (cShortName,SUBSTRING,(cShortName,PATINDEX('%A-Za-z0-9""},1,) ''_ 
end AS SHORT_NAME
4

4 に答える 4

1

コードから判断すると、文字列の先頭と末尾からスペースと英数字以外の文字を削除しようとしているようです。

もしそうなら、これはあなたのために働くでしょうか?最初の英数字の出現から最後までの部分文字列を提供すると思います。

SELECT
SUBSTRING(
 cShortName,
 PATINDEX('%A-Za-z0-9',cShortName),
  ( LEN(cShortName)
   -PATINDEX('%A-Za-z0-9',REVERSE(cShortName))
   -PATINDEX('%A-Za-z0-9',cShortName)
  )
) AS SHORTNAME
于 2010-08-05T23:59:19.157 に答える
0

なぜフィールドの後にスペースを与えないことになっていると思いますか?

編集:

私が理解している限り、この正規表現の範囲[a-zA-Z0-9]に一致しない文字を文字列から削除しようとしています(保持したい他の文字を追加してください)。

組み込み関数を使用してMicrosoftSQLServer(Microsoft SQL Serverを使用しているようです)でそれを行うためのクリーンな方法がわかりません。Webには、一時テーブルとwhileループを使用する例がいくつかありますが、これは見苦しいものです。文字列をそのまま返して呼び出し側で処理するか、CLRを使用してそれを実行する関数を記述し、selectステートメントから呼び出します。

これがお役に立てば幸いです。

于 2010-08-05T22:15:33.357 に答える
0

に置き換えTRIMますLTRIM

テストすることもできますLEN(cShortName) = 0

于 2010-08-05T22:16:12.963 に答える
0

うーん、このスクリプトにはいくつかの問題があるようですが、これを試してください。

Case 
     WHEN LTRIM(RTRIM(cSHortName))= '' Then NULL
     WHEN cShortname is NOT NULL THEN REPLACE(cShortName, SUBSTRING(cShortName, PATINDEX('%A-Za-z0-9', 1) , ''), '') 
end AS SHORT_NAME
于 2010-08-05T22:20:36.730 に答える