Как получить подстроку в sql-запросе

Я пытаюсь получить подстроку из позиции 0-7 в элементе int в имени таблицы, поэтому, когда я вставляю это

select substring(column_name,0, 6) as new_name from table_name 

я осознаю

Ошибка SQL [42883]: ОШИБКА: функция pg_catalog.substring (bigint, integer, integer) не существует

Подсказка: ни одна функция не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явное приведение типов.

Результат: 8

org.postgresql.util.PSQLException: ОШИБКА: функция pg_catalog.substring (bigint, integer, integer) не существует

Подсказка: ни одна функция не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явное приведение типов. Результат: 8

поэтому после добавления некоторого приведения в varchar (8)

select substring(varchar(8),column_name,0, 6) as new_name from table_name

получить это

Ошибка SQL [42601]: ОШИБКА: синтаксическая ошибка около "," Позиция: 28
org.postgresql.util.PSQLException: ОШИБКА: синтаксическая ошибка около "," Позиция: 28

Я не могу понять, что делаю не так. Спасибо.


person Stefanija    schedule 03.12.2016    source источник
comment
Функции не стандартизированы, каждая база данных может иметь разные, и обычно так и есть. Ваши теги говорят о dbeaver, а не о postgres   -  person Jacek Cz    schedule 03.12.2016


Ответы (2)


Вы можете cast столбец int как varchar, а затем сделать substring от 1 до 7

select substring(cast([your-column] as varchar(100)),1, 7)

Пример:

  declare @a int ='1234567890';
  select substring(cast(@a as varchar(100)),1, 7) as res

Вывод :

  res 
  1234567
person Jibin Balachandran    schedule 03.12.2016
comment
Спасибо, сер, мне не хватало @. - person Stefanija; 03.12.2016

Прямая трансляция в текст:

select substring(column_name::text, 1, 7) as new_name
from table_name 

Обратите внимание, что SQL (в отличие от языков типа C) использует индексацию на основе 1, поэтому первым символом является позиция 1. Также, в отличие от языков типа C, вторым параметром подстроки является длина (а не исключительный конечный индекс).

person Bohemian♦    schedule 03.12.2016