2016-09-23 19 views
0

我試圖分隔名稱列,並創建一個id列如下創建ID列:T-SQL從名稱列

mytable的:

name 
John F1234567 
Mary F7654321 
... 

我所做的到現在爲止是:

select RIGHT(name,8) as id, name FROM myTable 

結果:

id   name 
F1234567 John F1234567 
F7654321 Mary F7654321 

但我需要的結果是:

id   name 
F1234567 John 
F7654321 Mary 

我已經使用了一些字符串函數,但沒有成功。

任何人都可以幫助我嗎?

在此先感謝。

+0

好的,我給在如果在將記錄插入數據庫之前,名稱和標識是分開的,它會不會更好? – Will

回答

1

您可以嘗試使用替代功能

select RIGHT(name,8) as id, replace(name, right(name,8), '') as name FROM myTable 
+2

這裏的名字後面會有一個空格[John]。 – p2k

0
select RIGHT(name,8) as id, SUBSTRING(@name,1,CHARINDEX(' ',@name)) as name FROM myTable 
+0

如果名稱長於4個字符,該怎麼辦? –

+0

@WEI_DBA正確...更新了子串的答案.. –

+0

這樣做,某些名稱字符將會丟失。看到上面的答案,它工作得很好。謝謝你的時間! – jMarcel

0

您可以使用LEFT函數CHARINDEX得到一切的空間的左側。

select LEFT('John F1234567', CHARINDEX(' ','John F1234567')-1) 

返回John

CHARINDEX查找指定的字符串並返回字符串中的位置。我假設這個領域將永遠有這個空間。

+0

如果姓名有'John John F1234567' – p2k

+0

@ Pinwar13 true,那麼假設是由OP提供的數據 – Jeff

1

更換right(name,8)''可能不是正確的方法。

Select 
right(name, 8) as id, 
RTRIM(STUFF(name, (len(name) - 8) + 1, len(name) , '')) as name 
from table 
0

這和Kannan Kandasamy的回答一樣,也會清理所有前導和尾隨空格。

SELECT 
RIGHT(name,8) as id 
,ltrim(rtrim(replace(name, right(name,8), '')) as name 
FROM myTable 
0

SELECT SUBSTRING(名稱,0,CHARINDEX( ' '名)),SUBSTRING(姓名,CHARINDEX('',名稱),LEN(名稱))FROM myTable的