【问题标题】:trim and string_split don't work in SQL Server?trim 和 string_split 在 SQL Server 中不起作用?
【发布时间】:2019-06-20 21:08:18
【问题描述】:

我问是因为我需要知道为什么某些函数(split_string、trim)在 SQL Server(使用 SSMS)中不起作用。

如果我运行这样的事情:

SELECT TRIM('   SQL Tutorial! ') AS TrimmedString;

上面写着

消息 195,第 15 级,状态 10,第 60 行
“TRIM”不是可识别的内置函数名称。

是的,我可以使用rtrimltrim,但我还需要string_split 来完成其他任务。

那么问题是我有什么版本?在帮助/关于,它说 v17.9.1。但是根据这个页面,它很清楚地说它是受支持的。

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017

那么为什么它不起作用呢?

【问题讨论】:

  • SSMS 是访问数据库引擎的工具/接口...SSMS 的版本不一定与 SSMS 连接到的数据库引擎的版本相同.试试SELECT @@VERSION
  • 与 SSMS 无关,与 SQL Server 版本有关。 STRING_SPLIT() 是从 2016 年开始的,TRIM() 函数是从 2017 年开始的,所以你需要 SQL Server 2017 才能使用两者。使用哪种 SSMS 并不重要。
  • 我脑海中闪过这个想法。执行 SELECT @@VERSION 给出:Microsoft SQL Server 2012 (SP4-GDR) (KB4057116) - 11.0.7462.6 (X64) Jan 5 2018 22:11:56
  • 呃。我有一个较新的版本,但由于与 Studio Express 的冲突而被卸载。让我再试一次。

标签: sql sql-server string split sql-server-2012


【解决方案1】:

TRIM 是在 SQL Server 2017 中引入的。STRING_SPLIT 在 SQL Server 2016 中。您是否连接到早期版本的 SQL Server 上的数据库?

【讨论】:

【解决方案2】:
CREATE FUNCTION dbo.ERP_FN_TRIM
(@Stringa VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
     BEGIN
         DECLARE @StringaPulita VARCHAR(MAX),
                 @FlagSpazio    BIT;
         SET @StringaPulita='';
         SET @Stringa=LTRIM(RTRIM(@Stringa));
         SET @FlagSpazio=0;
         WHILE @Stringa <> ''
         BEGIN
             IF @FlagSpazio = 0
                 SET @StringaPulita=@StringaPulita + LEFT(@Stringa, 1);
             IF SUBSTRING(@Stringa, 2, 2) = '  '
             BEGIN
                 SET @FlagSpazio=1;
             END;
                 ELSE
             BEGIN
                 SET @FlagSpazio=0;
             END;
             SET @Stringa=SUBSTRING(@Stringa, 2, LEN(@Stringa));
         END;
         RETURN ISNULL(@StringaPulita, '');
     END;

【讨论】:

  • 不错的功能,但我认为它不能回答问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
相关资源
最近更新 更多