我正試圖將形式為lastname, firstname的姓名列重新排序為firstname lastname。 原來的列是NAME_BAT,我已經確認沒有前導或尾部空格。 以下是我的SQL代碼:
SELECT TOP (100) NAME_BAT
, LTRIM(RIGHT(NAME_BAT, CHARINDEX(', ', NAME_BAT) - 1) AS FIRST_NAME
, RTRIM(LEFT(NAME_BAT, CHARINDEX(', '/span>, NAME_BAT) - 1) AS LAST_NAME
, LTRIM(RIGHT(NAME_BAT, CHARINDEX(', '/span>, NAME_BAT) - 1) ' ' RTRIM(LEFT(NAME_BAT, CHARINDEX(', ', NAME_BAT) - 1) AS NAME_FULL
FROM pitch_aggregate
;
而這里是輸出的截圖:
為什么前四行是完美的,然后第5行在名字前有一個逗號和空格,而在第8行,第一個名字的前兩個字母被切斷了?
uj5u.com熱心網友回復:
我測驗了你的查詢,你確實有一些格式上的問題。
與其挑剔它,這里有一個更簡單的作業方法,你可以試試。通過使用cross apply和values結構,你可以抽象出字串的分割,留下一個更容易使用的select列的串列。
select name_bat, f.name FirstName, l.name LastName, Concat_ws(',f.name,l.name) Name_full
from t
cross apply (values( Left(name_bat, CharIndex(',',name_bat)-1 ))l(name)
cross apply (values( Replace(name_bat,Concat(l.name,', '),') )f(name)
uj5u.com熱心網友回復:
采取
LTRIM(RIGHT(NAME_BAT, CHARINDEX(', ', NAME_BAT) - 1)) AS FIRST_NAME
假設資料如Casanova, Bob
CHARINDEX(', ', NAME_BAT)回傳9
RIGHT(NAME_BAT, CHARINDEX(', ', NAME_BAT) - 1)是最右邊的9-1=8個字符,即nova, Bob
(你所有的樣本/測驗的名字和姓氏的長度幾乎相同。)我猜這不是你真正想要的?
現在,類似于
的東西SUBSTRING(NAME_BAT, CHARINDEX(', ', NAME_BAT) 2, 100)
可能是你正在尋找的東西。我認為這是一個典型的例子,說明為什么SQL是一個實作字串操作的糟糕地方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/306835.html
標籤:
下一篇:使用一個函式/回圈,制造新的列
