Отримати всі символи до місця в MySQL


81

Я хотів би, щоб усі символи були в полі перед пробілом

Наприклад, якщо field1є"chara ters"

Я хочу, щоб воно повернулося "chara"

Як би виглядав цей вибраний вислів?

Відповіді:


115

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

Зверніть увагу, що якщо рядок, про який йде мова, не містить пробілів, це поверне порожній рядок.


6
Він повертає "chara" з кінцевим простором. Вам потрібно зменшити результат LOCATE, якщо в кінці не потрібен роздільник: SELECT LEFT (field1, LOCATE ('', field1) - 1)
Enyby

1
Це не спрацює, якщо у вашому головному полі немає місця. Підстрока поверне порожнє значення замість повернення цілого рядка. Наприклад, якщо моє поле містить рядок "test-possible-wrong-name-name", підрядок нічого не поверне замість "test-possible-wrong-name-name".
Swapnil Gangrade

2
@SwapnilGangrade Залежно від фактичного випадку використання, може бути очікувана поведінка чи ні. Можна стверджувати, що якщо в рядку немає пробілу, то перед пробілом немає символів, тому слід повернути порожній рядок. У такому випадку інша особа може захотіти повернути цілий рядок. Питання не визначає, як повинна поводитися функція в цьому випадку. Я оновлю відповідь, щоб виділити його.
Mchl,

11
Тоді select SUBSTRING_INDEX( field1, ' ', 1 ) from table;буде вибір, якщо ми хочемо мати повний рядок, якщо місця немає.
Swapnil Gangrade

2
Відповідь нижче ( SUBSTRING_INDEX) є "кращим" як загальне рішення, оскільки він збереже значення, які не містять роздільника, замість того, щоб отримати пусте значення.
вироджений

88

Нижче наведено інший метод, який працює, а комусь може здатися дещо простішим. Він використовує функцію SUBSTRING_INDEX MySQL . A 1 повертає все до першого пробілу, а -1 повертає все після останнього пробілу.

Це повертає "chara":

SELECT SUBSTRING_INDEX( field1, ' ', 1 )

Це повертає 'ters':

SELECT SUBSTRING_INDEX( field1, ' ', -1 )

Деталі

Позитивне значення буде шукати вказаний символ із початку рядка, а негативне - з кінця рядка. Значення числа вказує на кількість вказаного вами символу, яку слід шукати перед поверненням решти шматка рядка. Якщо символ, який ви шукаєте, не існує, буде повернуто ціле значення поля.

У цьому випадку значення -2 повертає все праворуч від другого до останнього пробілу, якого в цьому прикладі не існує, тому буде повернуто ціле значення поля.


3
Це також працює, якщо є рядки, без пробілу, наприклад, "chara" також буде працювати.
bernhardh

2
Це чудово працювало для отримання основної + другорядної версії рядка версії з компонентами xyz.
thomthom

4
Це найкраще працює, коли потрібно повернути все поле, якщо символ не вдалося знайти.
stephentgrammer

Я використовую це для вилучення гео координат із рядкового поля, де гарантовано існує роздільник (кома).
об-іван

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

2
довелося змінити 0 на 1:SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;
Люлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.