SQL-запрос для получения только чисел из строки

Опубликовано: 1 Сентября, 2022

Как мы знаем, в базу данных SQL мы можем вставлять данные любого типа. Иногда на производственном сервере данные повреждаются из-за объединения двух или более строк и их сохранения в столбце. В этом случае мы можем извлечь числовую часть из этой строки и сохранить ее снова. Итак, в этой статье мы узнаем, как извлекать числовые части строки в SQL. Мы будем использовать Microsoft SQL в качестве нашего сервера.

Итак, начнем с создания базы данных.

Шаг 1: Создайте БД

Запрос:

CREATE DATABASE GFG

Шаг 2: Используйте эту БД

Запрос:

USE GFG

Шаг 3: Создайте таблицу

Создайте таблицу (GetNum) для хранения данных

Запрос:

CREATE TABLE GetNum(
 StudentName varchar (255)
)
 

Шаг 4: Вставьте некоторые данные в базу данных

Запрос:

 INSERT INTO GetNum (StudentName) VALUES ("Devesh123")
 
 INSERT INTO GetNum (StudentName) VALUES ("Geeks2")
 
 INSERT INTO GetNum (StudentName) VALUES ("For5")
 
 INSERT INTO GetNum (StudentName) VALUES ("Aman98")

Выход:

Шаг 4: SQL-запрос для извлечения чисел

Мы напишем функцию SQL, чтобы не запускать один и тот же запрос снова и снова для извлечения чисел, мы можем использовать эту функцию несколько раз, и она будет храниться в базе данных.

Запрос:

CREATE FUNCTION dbo.getNumericValue
 (
@inputString VARCHAR(256)
)
RETURNS VARCHAR(256)
AS
BEGIN
  DECLARE @integerPart INT
  SET @integerPart = PATINDEX("%[^0-9]%", @inputString)
  BEGIN
    WHILE @integerPart > 0
    BEGIN
      SET @inputString = STUFF(@inputString, @integerPart, 1, "" )
      SET @integerPart = PATINDEX("%[^0-9]%", @inputString )
    END
  END
  RETURN ISNULL(@inputString,0)
END
GO

Вы можете обратиться за более подробной информацией о PATINDEX().

Шаг 5: Теперь запустите созданную функцию, чтобы получить желаемый результат.

Запрос:

SELECT dbo.getNumericValue(StudentName) from GetNum

Выход: