【问题标题】:is there a "split" function in t-sql for a SELECT queryt-sql 中是否有用于 SELECT 查询的“拆分”函数
【发布时间】:2014-02-05 13:46:59
【问题描述】:

我想这样使用我的功能

SELECT BaseSplit(line,';') FROM table

有什么办法吗???

我尝试 CROSS APPLY 但这不是我想要的


我的表有一个名为 line 的列

line 
______
15;2;5
NULL
10;3;6

我想将此列拆分为

15
2
5
Null
10
3
6

是否有自动执行此操作的字符串函数?
如果没有,是否可以编写自己的函数?

【问题讨论】:

  • 为什么CROSS APPLY 不是你想要的?那你想要什么
  • 根据您的附加信息,SELECT f.* FROM table AS t CROSS APPLY dbo.BaseSplit(line,';') AS f 会返回什么?我们看不到您的函数定义。你需要OUTER APPLY吗?
  • 它重复了表格中的行,我想要那个 -
  • 你想要什么?根据您向我们展示的示例数据,我看不出合理的拆分函数会返回任何重复数据。请提供函数的定义。以及重现问题的示例数据。
  • 听起来我们可能还需要这个功能,对吗?您是否正在尝试找到“BaseSplit”之类的功能?

标签: sql sql-server tsql


【解决方案1】:

它应该可以正常工作,但您需要对函数进行模式限定。

IE:

SELECT dbo.BaseSplit(line,';') FROM table

如果您的函数与 dbo 位于不同的架构中,您显然应该使用它。

好的 - 假设它是一个表值函数然后......

SELECT t.Id, f.*  FROM table AS t CROSS APPLY dbo.BaseSplit(line,';') AS f

这将为每个拆分行返回一行 + 主表中该条目的 ID(假设主表中存在名为 Id 的列)。如果您想要更好,我将需要一个您期望的输出示例

【讨论】:

  • 分割函数很可能是 TVF 而不是标量 UDF。
  • 它给了我错误找不到列“dbo”或用户定义的函数或聚合“dbo.udf_wsdn_BaseSplit”,或者名称不明确。严重性 16
  • 好点。也许@user3190075可以给我们一个预期输出的例子,并描述函数BaseSplit(即确认它是表值函数还是标量函数)请问“那个错误”是什么?
  • 我想通过我的函数拆分表格中的列行
  • @user3190075 - 向我们展示示例源数据和所需结果。可悲的是,到目前为止,您还没有尝试口头解释。
猜你喜欢
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2019-11-25
  • 2012-11-15
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多