SQL Server:拆分操作

2023-11-21

如何在 SQL Server 中拆分字符串。

例子:

输入字符串:stack over flow

Result:

stack
over
flow

如果您不能使用表值参数,请参阅:“SQL Server 2008 中使用表值参数的数组和列表”作者:Erland Sommarskog,那么SQL Server中有很多种分割字符串的方法。本文涵盖了几乎每种方法的优点和缺点:

“当表值参数无法满足 SQL Server 2005 及更高版本中的数组和列表时”作者:Erland Sommarskog

您需要创建一个拆分函数。这是 split 函数的使用方式:

SELECT
    *
    FROM YourTable                               y
    INNER JOIN dbo.yourSplitFunction(@Parameter) s ON y.ID=s.Value

我更喜欢在 SQL 中使用数字表方法来分割字符串但是 SQL Server 中有多种分割字符串的方法,请参阅前面的链接,其中解释了每种方法的优点和缺点。

为了使数字表方法发挥作用,您需要执行一次时间表设置,这将创建一个表Numbers包含从 1 到 10,000 的行:

SELECT TOP 10000 IDENTITY(int,1,1) AS Number
    INTO Numbers
    FROM sys.objects s1
    CROSS JOIN sys.objects s2
ALTER TABLE Numbers ADD CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number)

设置 Numbers 表后,创建此拆分函数:

CREATE FUNCTION [dbo].[FN_ListToTable]
(
     @SplitOn  char(1)      --REQUIRED, the character to split the @List string on
    ,@List     varchar(8000)--REQUIRED, the list to split apart
)
RETURNS TABLE
AS
RETURN 
(

    ----------------
    --SINGLE QUERY-- --this will not return empty rows
    ----------------
    SELECT
        ListValue
        FROM (SELECT
                  LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(@SplitOn, List2, number+1)-number - 1))) AS ListValue
                  FROM (
                           SELECT @SplitOn + @List + @SplitOn AS List2
                       ) AS dt
                      INNER JOIN Numbers n ON n.Number < LEN(dt.List2)
                  WHERE SUBSTRING(List2, number, 1) = @SplitOn
             ) dt2
        WHERE ListValue IS NOT NULL AND ListValue!=''

);
GO 

现在,您可以轻松地将 CSV 字符串拆分为表并加入其中:

select * from dbo.FN_ListToTable(' ','stack over flow')

OUTPUT:

ListValue
-------------------
stack
over
flow

(3 row(s) affected)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server:拆分操作 的相关文章

随机推荐

  • 如何在服务器端安排PHP脚本的执行?

    我需要一个在特定时间自动执行的 PHP 脚本 我将如何实现这个目标 如果您运行的是 Linux Unix 包括 Mac OSX 创建一个 cron 作业 如果您运行的是 Windows 创建计划任务 Note 上述两个链接都专门针对 PHP
  • std::sort 类中的比较函数无法编译

    我正在编写一个程序来获得凸包 我需要按极角对点进行排序 我选择了base之前指出 所以我编写了一个成员比较函数 请注意 对于每个对象base点不同 但是当我将它应用到std sort 程序无法编译 这是我的程序 class ConvexHu
  • 翻译自定义 jQuery 验证消息

    我有一个关于 jQuery 验证的问题要问plugin 我已使用本地化来更改以西班牙语显示的错误消息的默认语言 但我找不到有关要翻译的自定义消息的任何内容 有什么线索吗 例如 我已经包含了西班牙语的翻译文件 这是我的代码 signup fo
  • 如何在Python中将for循环转换为并行处理?

    我仍处于学习 Python 的早期阶段 如果这个问题听起来很愚蠢 请提前道歉 我有这组数据 以表格格式 我想向其中添加一些计算列 基本上我有一些位置经度 纬度和目的地经度 纬度 以及各自的数据时间 并且我正在计算每对之间的平均速度 示例数据
  • 如何在没有singleTop的情况下使用Android SearchView?

    我有一个 Activity 通常希望存在于多个任务中 以便 后退 按钮恢复之前的状态 不过 我也想用一个搜索视图与现有的活动 而不将新的活动推入任务堆栈 因为我想搜索当前显示的内容 这是我的问题 如果我将 Activity 的启动模式设置为
  • AngularJS [$injector:unpr] 未知提供者

    我正在尝试将服务注入控制器 但出现以下错误 Error injector unpr Unknown provider employeeServiceProvider lt employeeService http errors angula
  • PHP 对象与数组——迭代时的性能比较

    我有大量用于神经网络的 PHP 对象 我必须对其进行迭代并执行一些数学运算 我想知道在类实例上使用关联数组是否会更好 我正在处理周围3640对象并迭代500次 最多 因此任何微观优化都有很大帮助 这样做必然会更快吗 object value
  • PHP 显示来自 MySQL 的图像 BLOB [重复]

    这个问题在这里已经有答案了 我正在尝试显示存储在数据库中 BLOB 列中的图像 我使用 SELECT 从数据库中获取数据 不对数据执行任何转换 并使用以下内容显示它 来自唯一输出如下的脚本 header Content Type image
  • Windows Phone 7 关闭应用程序

    是否有可能以编程方式关闭 Windows Phone 7 上的 Silverlight 应用程序 如果您编写 XNA 游戏 您将可以访问显式的Exit 方法 如果您正在编写传统的 Silverlight 项目 那么NO 无法以编程方式关闭您
  • 在 defer 函数内部发生恐慌是否可以,特别是当它已经发生恐慌时?

    func sub defer func panic 2 panic 1 func main defer func x recover println x int sub 我尝试了这段代码 这似乎是第一次恐慌panic 1 只是被第二次恐慌
  • 改造关闭响应体

    我一直收到这个错误 A connection to was leaked Did you forget to close a response body 所以我继续关闭我收到的回复 response body close 问题是 如果 re
  • 与其他禁用的 TextBox 相比,c# TextBox 被禁用时边框会发生变化

    我有一个非常奇怪的问题 我有多个用于用户名 密码的文本框 以及每个用户 密码组旁边的复选框 当用户单击复选框时 如果他选中了它 则其旁边的用户名和密码文本框将被启用 并且焦点将设置为用户名文本框 如果用户取消选中复选框 则其旁边的文本框将被
  • Laravel Blade 使用 $(document).ready 函数

    我正在尝试使用 laravel Blade 模板 包括一些 javascript 代码到子视图中 我有我的邮件应用程序 blade php文件 其中放置 jquery 初始化字符串 在我的子视图文件中设置 blade php我想使用一些 j
  • 实体框架 - 荒谬的查询,将smallint转换为int以进行比较[重复]

    这个问题在这里已经有答案了 这里没有想法了 我有一个简单的表 模型首先与实体框架映射 并生成以下 SQL p linq 0 int p linq 1 int SELECT Extent1 BucketRef AS BucketRef Ext
  • 重复数据框的行

    我正在尝试重复数据框的行 这是我的原始数据 pd DataFrame col1 1 col2 11 col3 1 2 col1 2 col2 22 col3 1 2 3 col1 3 col2 33 col3 1 col1 4 col2 4
  • 获取对父 IFRAME 的引用

    假设我有一个对包含在 IFRAME 内的文档对象的引用 如何获取对容器 IFRAME 的引用 parentNode 和 ownerDocument 都返回 null 请注意 没有可用的上下文信息 例如 window xxx 等解决方案将不起
  • 将移动应用程序同步到 Android Wear

    根据文档 打包可穿戴应用程序我正在使用以下代码 dependencies compile com google android gms play services 5 0 aar compile com android support su
  • Python Pandas - 缺少必需的依赖项 ['numpy'] 1

    从昨天开始 当我尝试在 anaconda 上导入包时出现此错误 ImportError Missing required dependencies numpy 我尝试卸载 Anaconda 和 Python 切换到 Python 2 7 但
  • 在 codeigniter 中调试路由?

    我想知道是否有任何简单的方法可以在 codeigniter 中调试路由 最好我希望能够在日志中看到以下内容 Client sent apps something Route found apps any gt applications se
  • SQL Server:拆分操作

    如何在 SQL Server 中拆分字符串 例子 输入字符串 stack over flow Result stack over flow 如果您不能使用表值参数 请参阅 SQL Server 2008 中使用表值参数的数组和列表 作者 E