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

在MySQL中获取空格前的所有字符,sql,mysql,Sql,Mysql,我希望在空格之前获得字段中的所有字符 例如,如果field1是“字符” 我希望它返回“chara” 这个select语句是什么样子的?您需要一些。假设每个字段至少有一个空格字符: SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table; 安全方法: SELECT IF( LOCATE(' ', field1), SUBSTR(field1, 0, LOCATE(' ', field1)), field1

我希望在空格之前获得字段中的所有字符

例如,如果
field1
“字符”

我希望它返回
“chara”

这个select语句是什么样子的?

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

SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;
安全方法:

SELECT IF(
    LOCATE(' ', field1),
    SUBSTR(field1, 0, LOCATE(' ', field1)),
    field1
) FROM your_table;
选择左侧(字段1,定位('',字段1)-1)


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

下面是另一个有效的方法,对某些人来说可能更简单一些。它使用。1返回第一个空格之前的所有内容,而-1返回最后一个空格之后的所有内容

这将返回“chara”:

SELECT SUBSTRING_INDEX( field1, ' ', 1 )
这将返回“ters”:

SELECT SUBSTRING_INDEX( field1, ' ', -1 )
详细信息

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


在本例中,a-2将返回倒数第二个空格右边的所有内容,本例中不存在该空格,因此将返回整个字段值

+1表示安全版本,但不清楚当字段不包含空白时应返回什么结果。必须将0更改为1:
从您的_表中选择SUBSTR(field1,1,LOCATE(“”,field1))返回带有尾随空格的“chara”。如果最后不需要分隔符,则需要减少定位结果:选择左(field1,LOCATE(“”,field1)-1。如果主字段不包含空格,则此操作将不起作用。子字符串将返回空值,而不是返回整个字符串。例如,如果我的字段包含字符串“test-mable-error-name”,子字符串将不返回任何内容,而不是“test-mable-error-name”。@SwapnilGangrade取决于实际用例中的预期行为与否。有人可能会说,如果字符串中没有空格,那么空格前就没有字符,因此应该返回一个空字符串。在这种情况下,另一个人可能希望返回整个字符串。问题没有指定函数在这种边缘情况下的行为。我将更新答案以突出显示它。然后从表中选择子字符串索引(field1,,,1)。下面的答案(
SUBSTRING\u INDEX
)作为一般解决方案是“更好的”,因为它将保留不包含分隔符的值,而不会产生空值。如果有字符串,则这也可以工作,而不需要空值,例如,“chara”也可以使用。这在获取包含x.y.z组件的版本字符串的主版本和次版本时非常有效。如果找不到该字符,则希望返回整个字段时效果最佳。我使用它从字符串字段中提取地理坐标,该字段中保证存在分隔符(逗号)。