【问题标题】:How to get Substring in sql query如何在sql查询中获取子字符串
【发布时间】:2017-04-18 02:31:24
【问题描述】:

我试图从表名的 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

我不知道我做错了什么。谢谢。

【问题讨论】:

  • 函数没有标准化,每个数据库可以有不同的,而且通常都有。你的标签说的是 dbeaver 而不是 postgres

标签: sql substring dbeaver


【解决方案1】:

您可以将castint 列为varchar,然后将substring1 变为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

【讨论】:

  • 谢谢您,@ 是我所缺少的。
  • 如果需要将长度作为第三个参数传递,您可以使用 len(column) 函数。
【解决方案2】:

直接转换为文本:

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

请注意,SQL(与类似 C 的语言不同)使用 1-based 索引,因此第一个字符是位置 1。与类 C 语言不同的是,substring 的第二个参数是 length(不是唯一的结束索引)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2012-07-27
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多