“名称”列中的“T-SQL创建标识”列

时间:2016-09-23 19:06:29

标签: sql sql-server tsql

我尝试将name列分开并创建一个id列,如下所示:

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

我使用了一些字符串函数,但没有成功。

有人可以帮助我吗?

提前致谢。

6 个答案:

答案 0 :(得分:1)

您可以尝试使用替换功能

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

答案 1 :(得分:1)

right(name,8)替换''可能不是正确的方法。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用CHARINDEX的LEFT功能来获取空间左侧的所有内容。

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

返回John

CHARINDEX查找指定的字符串并返回其在字符串中的位置。我假设这个领域总是有这个空间。

答案 4 :(得分:0)

这与Kannan Kandasamy的回答一样,也将清理任何前导和尾随空格。

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

答案 5 :(得分:0)

SELECT SUBSTRING(名称,0,CHARINDEX('',名称)),SUBSTRING(名称,CHARINDEX('',名称),LEN(名称))FROM myTable