Skip to content

position(substr, str)

Описание

Функция position() возвращает позицию первого вхождения подстроки в строке. Позиции нумеруются с 1. Если подстрока не найдена, возвращает 0. Это синоним функции instr().

Параметры

  • substr: string или Column - подстрока для поиска
  • str: string или Column - строка, в которой осуществляется поиск

Возвращаемое значение

Integer - позиция первого вхождения подстроки (начиная с 1) или 0, если подстрока не найдена

Пример использования

from pyspark.sql.functions import position

# Создаем DataFrame
df = spark.createDataFrame([
    ("Hello World", "World"),
    ("Hello World", "world"),
    ("Hello World", "Hello"),
    ("Hello World", "o"),
    ("Hello World", "Python"),
    ("Hello World", None),
    (None, "World")
], ["text", "substring"])

# Ищем позиции подстрок
df.select(
    "text",
    "substring",
    position("substring", "text").alias("position")
).show()

# Результат:
# +-----------+---------+--------+
# |       text|substring|position|
# +-----------+---------+--------+
# |Hello World|    World|       7|  # World начинается с позиции 7
# |Hello World|    world|       0|  # world не найдено (регистр)
# |Hello World|    Hello|       1|  # Hello начинается с позиции 1
# |Hello World|        o|       5|  # Первое 'o' на позиции 5
# |Hello World|   Python|       0|  # Python не найдено
# |Hello World|     null|    null|  # NULL в подстроке
# |       null|    World|    null|  # NULL в основном тексте
# +-----------+---------+--------+

Примечания

  • Поиск чувствителен к регистру
  • Позиции нумеруются с 1
  • Если подстрока не найдена, возвращается 0
  • Если любой из аргументов NULL, результат NULL
  • Это синоним функции instr()
  • Для поиска с конца строки используйте locate() с параметром pos
  • Для поиска всех вхождений используйте regexp_count()
  • Функция полезна для поиска позиций подстрок в тексте