相关疑难解决方法(0)

如何将字符串中的字符串拆分为SQL Server中的单独列

我在SQL Server中有一个字段,包含部分,乡镇和范围信息,每个字段用短划线分隔; 例如:18-84-7.我希望将每个单元,部分作为一个字段,乡镇作为一个字段和范围作为一个字段分开,如:18 84 7.

字符数有所不同.这并不总是2个字符或每单位1个字符,所以我认为最好的办法是由破折号分开,但我不知道如何做到这一点.有没有办法在SQL Server中完成此操作?

谢谢!

regex sql sql-server-2008-r2

7
推荐指数
1
解决办法
3万
查看次数

包含在"WHERE ... IN"子句中的udf中的奇怪错误

我有一个分割字符串的功能(为了清晰起见粘贴在最后).单独使用时,此功能可按预期工作.例:

SELECT value
FROM dbo.mg_fn_Split('2#1','#')
Run Code Online (Sandbox Code Playgroud)

返回

-- value --
--   2   --
--   1   --
-----------
Run Code Online (Sandbox Code Playgroud)

但是当在"WHERE IN"子句中使用时,就像在这个例子中一样(稍后在tableA上更多):

SELECT * FROM TableA WHERE TableA.id IN
(
  SELECT value
  FROM dbo.mg_fn_Split('2#1','#')
)
Run Code Online (Sandbox Code Playgroud)

我收到错误:"传递给LEFT或SUBSTRING函数的长度参数无效."

这里使用TableA作为示例.使用不同的表(假设它们具有id列)有时会返回正确的结果,而在其他表上我得到错误.

我假设它与执行顺序有关,但我仍然没有看到什么可能"破坏"该功能.

我正在寻找一个"正在发生什么"的解释,而不是"使用它".我知道我可以使用连接来获得结果.

功能定义:

-- Description: Returns a table containing the results of a string-split operation.
-- Params:
--      DelimitedList: The string to split
--      Delimiter: The delimiter char, defaults to ','
-- Columns:
--      Position - The char index of the item
--      Value - The actual …
Run Code Online (Sandbox Code Playgroud)

sql user-defined-functions sql-server-2008

5
推荐指数
1
解决办法
365
查看次数