TRIM不是一个被识别的内置函数名。

89

以下是示例代码:

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

  select TRIM(@ss)

我遇到了一个错误:

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


2
我的 SQL Server 2017 运行良好。 - Squirrel
15
或许它被设置为较早的兼容性级别。使用以下语句查找:SELECT compatibility_level FROM sys.databases。它需要设置为 140。 - Nick.McDermaid
1
@Nick.McDermaid,你应该把它发布为答案。 - Zohar Peled
1
你可以使用 ltrim 或 rtrim。 - Mohammad Shehroz
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 codename Hekaton 12.0.2000.8 --SQL Server 2012 SQL Server 11 SQL Server 11.0 codename Denali 11.0.2100.60 - ARLibertarian
3个回答

122

TRIM 是在 SQL Server 中引入的函数(从 2017 开始)。

在旧版本的 SQL Server 中,要执行 trim 操作,您必须像下面这样使用 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。除非他们弄错了客户端工具。 - Nick.McDermaid
似乎有人误将2017年标记为该版本,可能是因为读取了其他用户的第一条评论。原帖并未提及它是2017年版本,因此我认为这是某个旧版本。 - PSK
啊,我明白了。我猜测原帖作者不会回来澄清,所以我会尝试编辑问题并将其删除。 - Nick.McDermaid
2
我在SQL方面是个业余爱好者。虽然我已经定义了函数,但我不明白为什么我不能使用TRIM,因为它总是显示“'trim'不是一个被识别的内置函数名称。”结果我必须像这样使用它:dbo.TRIM - Lam Le
@LamLe T-SQL要求UDF调用点必须带有模式限定符(即你的CREATE FUNCTION dbo.TRIM必须被称为dbo.TRIM而不是TRIM),这是因为SQL Server解析未限定标识符的方式 - 这并不理想,但是其他选择更糟糕。阅读此链接:https://dba.stackexchange.com/questions/1221/why-cant-i-call-my-udf-directly-why-do-i-need-to-qualify-it-3-levels-deep - undefined

26
也许它被设置为早期的兼容性级别。
使用这个来找出:
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.

根据下面的评论,您安装的 SQL Server 版本是 SQL 2016。您需要安装 SQL Sever 2017 才能获得 TRIM


你可能想要添加链接到ALTER DATABASE (Transact-SQL) 兼容性级别。它列出了每个SQL Server版本支持的兼容性级别列表。 - Zohar Peled
你说得对,那会很有帮助。我已经谷歌了整个答案,希望原帖作者也能自己做到!请随意编辑! - Nick.McDermaid
设置兼容性级别时出现错误,错误代码为Msg 15048,级别为16,状态为1,行号为4。 数据库兼容性级别的有效值为100、110、120或130。 - pixel
我正在使用MS SqlServer Management Studio 17.0和18.1,两者都存在此问题。COMPATIBILITY_LEVEL为130,但当我尝试将其设置为140时,会出现错误“数据库兼容性级别的有效值为100、110、120或130”。 - pixel
1
@Nick.McDermaid 当我在兼容性级别为100的SQL 2017上测试时,它可以工作 - 我相信兼容性级别不是原因,只是服务器版本。 - Geoff
显示剩余3条评论

6
您可以在旧版本中使用此代码:
SELECT RTRIM (LTRIM (' JKL ')) AS Trimmed

这将导致'JKL'这个结果。

这就是(还有许多其他事情),我们知道SQL Server真的很糟糕!这就是微软的做法:如果我们可以把它复杂化,为什么要简单化呢! - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接