Извлечь часть типа float - PullRequest
0 голосов
/ 03 марта 2020

Как извлечь часть типа с плавающей точкой в ​​SQL Сервер?

CREATE TABLE [dbo].[TestPhoneNumbers]
(
    [phone] [float] NULL,
    [type] [nvarchar](255) NULL
);

INSERT INTO [TestPhoneNumbers]
VALUES  (1111122222,'GOOD'),
        (3333344444,'GOOD'),
        (5555566666,'GOOD'),
        (7777788888,'GOOD'),
        (1,'INCORRECT');

SELECT SUBSTRING(CONVERT (VARCHAR(50), phone, 128), 4, 10)
FROM TestPhoneNumbers;

Этот запрос вернул неожиданные символы

SELECT SUBSTRING(phone, 4, 10)
FROM TestPhoneNumbers;

И этот запрос вернул ошибку

Аргумент типа данных с плавающей точкой недопустим для аргумента 1 функции substring.

Мой вопрос: как получить с телефона самые правые 5 символов, если длина телефона превышает 5 символов? то есть, если телефон 123456789, ожидаемый результат будет 56789.

1 Ответ

3 голосов
/ 03 марта 2020

Исправьте ваши данные! Номера телефонов не должны храниться как float. Это просто неправильное представление - неточное число для представления точного номера телефона?

CREATE TABLE [dbo].[TestPhoneNumbers](
    [phone] varchar(255) NULL,
    [type] [nvarchar](255) NULL
);

INSERT INTO [TestPhoneNumbers] (phone, type)
    VALUES ('1111122222', 'GOOD'),
           ('3333344444', 'GOOD'),
           ('5555566666', 'GOOD'),
           ('7777788888', 'GOOD'),
           ('1', 'INCORRECT');

Тогда вы можете использовать RIGHT():

SELECT RIGHT(phone, 5) as right5
FROM TestPhoneNumbers;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...