在MySQL中获取空格之前的所有字符


80

我想获得一个空格之前的字段中的所有字符

例如,如果field1"chara ters"

我要它回来 "chara"

该选择语句是什么样的?

Answers:


114

SELECT LEFT(field1,LOCATE(' ',field1) - 1)

请注意,如果所讨论的字符串不包含空格,则将返回一个空字符串。


6
它以尾随空格返回“ chara”。如果最后不需要分隔符,则需要减少LOCATE的结果:SELECT LEFT(field1,LOCATE('',field1)-1)
Enyby 2014年

1
如果您的主字段不包含空格,则此方法将无效。子字符串将返回空值,而不是返回整个字符串。例如,如果我的字段包含字符串“ test-possible-incorrect-name”,则子字符串将不返回任何内容,而不会返回“ test-possible-incorrect-name”。
Swapnil Gangrade

2
@SwapnilGangrade取决于实际的使用情况,是否可能出现预期的行为。有人可能会争辩说,如果字符串中没有空格,那么空格之前就没有字符,因此应该返回一个空字符串。在这种情况下,另一个人可能希望返回整个字符串。该问题未指定该函数在这种极端情况下的行为。我将更新答案以突出显示它。
Mchl

11
select SUBSTRING_INDEX( field1, ' ', 1 ) from table;如果我们想在没有空格的情况下使用完整的字符串,那么将是一个选择。
Swapnil Gangrade

2
SUBSTRING_INDEX)下方的答案作为一般解决方案是“更好”的,因为它将保留不包含定界符的值,而不是产生空白值。
退化

87

下面是另一种可行的方法,对于某些人来说似乎更简单一些。它使用SUBSTRING_INDEX MySQL函数。1返回第一个空格之前的所有内容,-1返回最后一个空格之后的所有内容。

这将返回“ chara”:

SELECT SUBSTRING_INDEX( field1, ' ', 1 )

这将返回“ ters”:

SELECT SUBSTRING_INDEX( field1, ' ', -1 )

细节

正值将从字符串的开头寻找您指定的字符,负值将从字符串的结尾开始。数字的值表示在返回字符串的其余部分之前要查找的指定字符的数量。如果您要搜索的字符不存在,则将返回整个字段值。

在这种情况下,-2会将所有内容返回到倒数第二个空格的右侧,该位置在此示例中不存在,因此将返回整个字段值。


3
如果有字符串且没有空格,这也可以使用,例如'chara'也可以使用。
bernhardh 2015年

2
这在获取带有xyz组件的版本字符串的主要版本与次要版本方面非常有用。
thomhom

4
如果您希望在找不到字符的情况下返回整个字段,则此方法效果最佳。
stephentgrammer

我使用它从保证存在定界符(逗号)的字符串字段中提取地理坐标。
ob-ivan

11

您将需要一些字符串操作。假设每个字段至少有一个空格字符:

SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;

安全方法:

SELECT IF(
    LOCATE(' ', field1),
    SUBSTR(field1, 0, LOCATE(' ', field1)),
    field1
) FROM your_table;

+1表示安全版本,但不清楚字段不包含空格时应返回什么结果。
Mchl 2010年

2
不得不改变0 1:SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;
圣路易斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.