-1

ここに画像の説明を入力してください

次のクエリでuser_name_n列からfnameを取得するクエリを書いています。pathindexを使用して'% %'、pathindexの戻り値を左に渡すときにスペースを見つけています。これは正常に機能しますが、次のようなクエリを,作成する方法も記録しています。また、世話をし,ます。

のようないくつかのレコードBellianはありませんがspace or ,、それでもfnameでそれらが必要ですが、次のクエリでは機能しません。

SELECT top 100 user_name_n,left(user_name_n,(patindex('% %',user_name_n)))
from SFCHA10_04_02_2012;

誰かが私にどのように私が望ましい結果を達成することができるか教えてもらえますか?

4

3 に答える 3

2
Select user_name_n,
       left(user_name_n,patindex('%[, ]%',user_name_n + ' ')-1)
From   SFCHA10_04_02_2012;

'%[, ]%' を使用して、スペースまたはコンマを検索できることに注意してください。また、2 番目のパラメーターに + ' ' を追加したことにも注意してください。これにより、データにスペースが含まれていない場合でも一致します。

于 2012-04-17T12:13:25.473 に答える
1
SELECT TOP (100) user_name_n,
    SUBSTRING(
        user_name_n,
        COALESCE(CHARINDEX(',',user_name_n)+1,1), 
        COALESCE(NULLIF(CHARINDEX(' ',user_name_n),0),255))
from SFCHA10_04_02_2012;

フォームにコンマが含まれているときに名の代わりに名前が必要な場合lname,fname(この奇妙な要件の理由がわからない場合)、次のようにします。

SELECT TOP (100) user_name_n,
    SUBSTRING(user_name_n, 1, 
  COALESCE(NULLIF(CHARINDEX(',',user_name_n)-1,-1),
        NULLIF(CHARINDEX(' ',user_name_n),0),255))
from SFCHA10_04_02_2012;
于 2012-04-17T11:58:08.707 に答える
0

そのため、最初に CTE のカンマとドットを空白に置き換え、名前を最初からスペースの最初の出現まで (またはスペースがない場合は全長) 切り取ります。

with aux_query as(
select 
replace(REPLACE(user_name_n,',',' '),'.',' ')  as name
from SFCHA10_04_02_2012
)
select SUBSTRING (name,1, case CHARINDEX(' ',name) when null then LEN(name) else LEN(name) end)
from aux_query
于 2012-04-17T12:22:04.017 に答える