3

我试图从表名的 int 元素中的 0-7 位置获取子字符串,所以当我插入这个时

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

我无法弄清楚我做错了什么。谢谢。

4

2 回答 2

3

您可以castint列作为varchar,然后substring17

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
于 2016-12-03T06:05:13.773 回答
3

直接转换为文本:

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

请注意,SQL(与类 C 语言不同)使用基于 1 的索引,因此第一个字符是 position 1。也与类 C 语言不同,子字符串的第二个参数是长度(不是唯一的结束索引)。

于 2016-12-03T06:05:38.937 回答