【问题标题】:TRIM is not a recognized built-in function nameTRIM 不是公认的内置函数名称
【发布时间】:2019-10-04 11:49:48
【问题描述】:

对于以下代码:

DECLARE @ss varchar(60)
  SET @ss = 'admin'

  select TRIM(@ss)

我有一个错误:

'TRIM' 不是可识别的内置函数名称

【问题讨论】:

  • 在我的SQL Server 2017上没问题
  • 可能将其设置为较早的兼容级别。使用它来查找:SELECT compatibility_level FROM sys.databases。它必须是 140
  • @Nick.McDermaid 您应该将其发布为答案。
  • 你可以使用 ltrim 或 rtrim
  • TRIM 在 SQL Server 中(从 2017 年开始),因此,这些都不是:--SQL Server 2016 SQL Server 13 SQL Server 13.0 13.0.1601.5 --SQL Server 2014 SQL Server 12 SQL Server 12.0 代号Hekaton 12.0.2000.8 --SQL Server 2012 SQL Server 11 SQL Server 11.0 代号 Denali 11.0.2100.60

标签: sql sql-server tsql


【解决方案1】:

TRIM 在 SQL Server 中引入(从 2017 年开始)。

在旧版本的 SQL Server 中,要执行修剪,您必须使用 LTRIMRTRIM,如下所示。

DECLARE @ss varchar(60)
  SET @ss = ' admin '

  select RTRIM(LTRIM(@ss))

如果您不喜欢在任何地方使用LTRIMRTRIM,您可以创建自己的自定义函数,如下所示。

   CREATE FUNCTION dbo.TRIM(@string NVARCHAR(max))
    RETURNS NVARCHAR(max)
     BEGIN
      RETURN LTRIM(RTRIM(@string))
     END
    GO

【讨论】:

  • 但这不是旧版本 - 显然是 SQL 2017。除非他们把客户端工具弄混了
  • 似乎有人通过阅读其他用户的第一条评论错误地标记了 2017。 OP 从未提到它是 2017 年。所以我假设它是旧版本。
  • 啊,我明白了。我认为 OP 永远不会回来清理它,所以我会看看是否可以编辑问题并将其删除
  • 我是 SQL 的业余爱好者。虽然我已经定义了函数,但我想知道为什么我不能使用TRIM,因为它总是说'trim' is not a recognized built-in function name. 原来我必须像这样使用它dbo.TRIM
【解决方案2】:

也许它设置为较早的兼容性级别。

用这个找出来:

SELECT compatibility_level FROM sys.databases

SQL Server 2017 是 140

如果再低一点,它就无法识别TRIM

更改对 SQL Server 2017 的兼容性

ALTER DATABASE database_name   
SET COMPATIBILITY_LEVEL = 140

有关每个 SQL Server 版本支持的兼容性级别列表,请查看ALTER DATABASE (Transact-SQL) Compatibility Level.

根据下面的cmets,你安装的SQL Server版本是SQL 2016,需要安装SQL Sever 2017才能得到TRIM

【讨论】:

  • 您可能希望将链接添加到ALTER DATABASE (Transact-SQL) Compatibility Level。它具有每个 SQL Server 版本支持的兼容性级别列表。
  • 你说得对,这会很有帮助。我确实在谷歌上搜索了整个答案,希望 OP 可以自己做到这一点!随意编辑!
  • 使用 Msg 15048 设置兼容级别错误,级别 16,状态 1,第 4 行 数据库兼容级别的有效值为 100、110、120 或 130。
  • 我正在使用 MS SqlServer Management Studio 17.0 和 18.1,两者都有这个问题。 COMPATIBILITY_LEVEL 为 130,但当我尝试将其设置为 140 时,出现错误“数据库兼容级别的有效值为 100、110、120 或 130。”
  • @Nick.McDermaid 当我在兼容级别为 100 的 SQL 2017 上测试它时,它可以工作 - 我相信兼容性级别不是原因,只是服务器版本
【解决方案3】:

您可以将此代码用于旧版本:

SELECT RTRIM (LTRIM (' JKL ')) AS Trimmed

导致'JKL'

【讨论】:

  • 这就是(以及许多其他事情)我们知道 SQL Server 真的很糟糕!这就是微软做事的方式:如果我们可以把它复杂化,为什么要让它变得简单!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2014-06-12
相关资源
最近更新 更多