2012-11-20 36 views
20

我有一个看起来像下面的例子中的MSSQL数据库字段:选择数据到一个空间?

u129 james 
u300 chris 
u300a jim 
u202 jane 
u5 brian 
u5z brian2 

有没有办法来选择第一字符集?基本上选择所有的字符,直到第一行空格?

我试着用LEFT,RIGHT,LEN搞乱,但是找不到像我的例子那样用可变字符串长度来完成它的方法。

谢谢!

回答

56

您可以使用LEFTCHARINDEX一个combiation找到第一个空间的索引,然后抓住一切的是左边。

SELECT LEFT(YourColumn, charindex(' ', YourColumn) - 1) 

而且在任何情况下,你的列没有在他们的空间:

SELECT LEFT(YourColumn, CASE WHEN charindex(' ', YourColumn) = 0 THEN 
    LEN(YourColumn) ELSE charindex(' ', YourColumn) - 1 END) 
+2

@Beth - 请注意编辑,你抹去了我答案的一半。建议我添加引用链接会更有帮助。 – LittleBobbyTables

+0

对不起,LittleBobbyTables,不知道我们有相互竞争的修改。 – Beth

+1

很好的解释,但你失去了一个 - 这也抓住了空间。 – Blorgbeard

2
select left(col, charindex(' ', col) - 1) 
+0

这种方法的问题是你必须提及'YourColumn'两次,如果'YourColumn'是计算的结果(例如'RIGHT'的结果),这是有问题的 –

1

的选择,如果你一时没有空格不想使用CASE语句

select REVERSE(RIGHT(REVERSE(YourColumn), LEN(YourColumn) - CHARINDEX(' ', REVERSE(YourColumn)))) 

这适用于SQL Server,并根据我的搜索MySQL具有相同的功能

1

如果第一个列总是相同的尺寸(包括空格),那么你可以把这些字符(通过LEFT)和清理空间(与RTRIM):

SELECT RTRIM(LEFT(YourColumn, YourColumnSize)) 

或者,您可以提取第二(或第三等)柱(使用SUBSTRING):

SELECT RTRIM(SUBSTRING(YourColumn, PreviousColumnSizes, YourColumnSize)) 

一个这种方法(特别是如果YourColumn是计算的结果)的好处是,YourColumn仅指定一次。