Извлечение чисел из строки в SQL

Чтобы извлечь числа из строки в SQL, вы можете использовать несколько методов. Вот несколько часто используемых подходов:

  1. Использование пользовательской функции (UDF):
    Вы можете создать пользовательскую функцию, которая перебирает каждый символ строки и извлекает числа. Вот пример использования SQL Server:

    CREATE FUNCTION dbo.ExtractNumbers (@inputString VARCHAR(1000))
    RETURNS VARCHAR(1000)
    AS
    BEGIN
       DECLARE @outputString VARCHAR(1000) = ''
       DECLARE @index INT = 1
       DECLARE @char CHAR(1)
       WHILE @index <= LEN(@inputString)
       BEGIN
           SET @char = SUBSTRING(@inputString, @index, 1)
           IF @char LIKE '[0-9]'
               SET @outputString = @outputString + @char
           SET @index = @index + 1
       END
       RETURN @outputString
    END

    Затем вы можете использовать UDF в своих SQL-запросах следующим образом:

    SELECT dbo.ExtractNumbers('abc123def456') AS ExtractedNumbers

    Это вернет извлеченные числа: «123456».

  2. Использование комбинации функций манипулирования строками.
    Другой способ извлечения чисел — использование встроенных функций манипулирования строками. Вот пример использования SQL Server:

    DECLARE @inputString VARCHAR(1000) = 'abc123def456'
    DECLARE @outputString VARCHAR(1000) = ''
    WHILE PATINDEX('%[^0-9]%', @inputString) > 0
    BEGIN
       SET @outputString = @outputString + SUBSTRING(@inputString, PATINDEX('%[^0-9]%', @inputString), 1)
       SET @inputString = STUFF(@inputString, PATINDEX('%[^0-9]%', @inputString), 1, '')
    END
    SELECT @outputString AS ExtractedNumbers

    Это также вернет извлеченные числа: «123456».

  3. Использование регулярных выражений.
    Если ваша система баз данных поддерживает регулярные выражения, вы можете использовать их для извлечения чисел из строки. Точный синтаксис может различаться в зависимости от используемой вами системы базы данных. Вот пример использования PostgreSQL:

    SELECT regexp_replace('abc123def456', '[^0-9]', '', 'g') AS ExtractedNumbers

    Это вернет извлеченные числа: «123456».