使用 Transact-SQL 查找特定子字符串

2024-01-08

我需要从以下形式的字符串中提取特定的子字符串:

foo=abc;bar=def;baz=ghi

例如,我如何从该字符串中获取“bar”的值?


您可以使用字符索引 http://msdn.microsoft.com/en-us/library/ms186323.aspx and 子串 http://msdn.microsoft.com/en-us/library/ms187748.aspx。例如,要搜索“baz”的值:

declare @str varchar(128)
set @str = 'foo=abc;bar=def;baz=ghi'

-- Make sure @str starts and ends with a ;
set @str = ';' + @str + ';'

select substring(@str, 
    charindex(';baz=',@str) + len(';baz='),
    charindex('=',@str,charindex(';baz=',@str)) - charindex(';baz=',@str) - 1)

或者对于字符串开头的“foo”的值:

select substring(@str, 
    charindex(';foo=',@str) + len(';foo='),
    charindex('=',@str,charindex(';foo=',@str)) - charindex(';foo=',@str) - 1)

这是一个实现此目的的 UDF(受 BlackTigerX 答案启发的更具可读性的版本):

create function dbo.FindValueInString(
    @search varchar(256),
    @name varchar(30))
returns varchar(30)
as
begin
    declare @name_start int
    declare @name_length int
    declare @value_start int
    declare @value_end int

    set @search = ';' + @search

    set @name_start = charindex(';' + @name + '=',@search)
    if @name_start = 0
        return NULL

    set @name_length = len(';' + @name + '=')
    set @value_start = @name_start + @name_length
    set @value_end = charindex(';', @search, @value_start)

    return substring(@search, @value_start, @value_end - @value_start)
end

正如您所看到的,这在 Sql Server 中并不容易:) 最好用客户端语言来完成此操作,或者规范化您的数据库,以便子字符串位于它们自己的列中。

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

使用 Transact-SQL 查找特定子字符串 的相关文章

  • WinForms 应用程序设计 - 将文档从 SQL Server 移动到文件存储

    我有一个连接到 SQL Server 的标准 WinForms 应用程序 该应用程序允许用户上传当前存储在数据库中的文档 在使用图像列的表中 我需要更改这种方法 以便将文档存储为文件 并将文件的链接存储在数据库表中 使用当前的方法 当用户上
  • SQL 多次更新与单次更新性能

    假设我有 10 000 行需要更新 什么会更快 UPDATE DB Servers SET Live 1 where name server1 UPDATE DB Servers SET Live 1 where name server2
  • 如何处理用户界面中的数据库约束违规?

    我们使用存储过程在数据库中实现大部分业务规则 我永远无法决定如何最好地将数据约束违规错误从数据库传递回用户界面 我所说的约束更多地与业务规则相关 而不是与数据完整性相关 例如 诸如 无法插入重复的键行 之类的数据库错误与业务规则 不能有多个
  • SQL:每天选择最接近特定时间的一条记录

    我有一张表存储某个时间点的值 CREATE TABLE values value DECIMAL datetime DATETIME 每一天可能有多个值 也可能某一天只有一个值 现在我想获取给定时间跨度 例如一个月 内最接近一天中给定时间的
  • MYSQL 查询返回“资源 id#12”而不是它应返回的数值

    不知道为什么 但这返回了错误的值 我正在取回此资源 ID 12 而不是我正在寻找的数值 1 执行此操作的代码是 type SELECT account type from user attribs WHERE username userna
  • 插入后用触发器更新多行(sql server)

    我有一个表 orderDetails 包含订单的产品 产品编号 color size quantity 和一个表库存 产品编号 size color stock 订单完成后 我使用此查询将项目插入表中orderDetails INSERT
  • 检查 SELECT 子句中的另一个表中是否存在某个值

    我想查询 table1 中的名称 并查找 table2 中是否存在名称 我有以下查询 但它似乎不起作用 有什么建议我做错了什么吗 select A name CASE WHEN A name in select B name in tabl
  • Visual Studio SSDT Data Compare如何比较单个数据库中的两个表

    尝试在 SSDT 中做一些简单的数据比较 但事实证明有点困难 在一个数据库中 我有两个要比较的表 这些表具有相同的架构 只是表名不同 我只是想看看这个工具是否能给我一个很好的方法来比较两者的数据 I e tblOutput tblOutpu
  • Id 或 [TableName]Id 作为主键/实体标识符

    是否首选使用 Id 作为主键的列名或 TableName Id 作为命名约定 表 账户主键 ID 相对 表 账户主键 AccountId 在我见过的实现中 它似乎分为 50 50 左右 每种方法的优点和缺点是什么 跟进 在我的数据库中使用一
  • SQL SERVER 中的排序依据和大小写

    我需要在存储过程中按功能排序 一个值被发布到网络服务 并且基于该值我必须以某种方式对结果进行排序 即 当 ColName 按 ColName 发布订单时 当 ColName2 由 ColName2 发布订单时 我正在研究使用 Case 但出
  • SqlCommand 参数与 String.Format [重复]

    这个问题在这里已经有答案了 我一直在互联网上搜索 但似乎找不到任何可以解释我的问题的内容 可能是我没有使用正确的搜索字符串 所以我在这里发帖希望有人可以帮助我有了这个 我的程序是使用Visual Studio 2010用C 编写的 我注意到
  • ClassCastException:java.util.Date 无法转换为 java.sql.Date

    你好 我的代码抛出了ClassCastException StackTrace 显示 java lang ClassCastException java util Date cannot be cast to java sql Date a
  • 将 UPDATE 转换为 INSERT INTO ON DUPLICATE KEY UPDATE 语句

    我有这个 UPDATE MySQL 语句 效果很好 UPDATE table1 Inner Join table2 ON table2 id table1 gw id SET table1 field1 1 table1 field2 2
  • java.sql.Timestamp 到微秒精度的字符串

    我正在将时间戳列从数据库读取到 java sql Timestamp 对象中 然后我想将时间戳的值转换为 String 对象 但保持微秒精度 调用 toString 方法让我接近 但它似乎在微秒内丢失了尾随零 如果时间戳以非零数字结尾 则一
  • 创建表作为 select 删除 postgresql 中的非空约束

    在 postgres sql 中 创建表时 select 删除了表上的非空约束 例如 对此没有单一命令的解决方案 要基于现有表 包括所有约束 创建表 请使用 create table B like a including constrain
  • 使用 Switch 的报告服务表达式

    我无法让这个表达式与报告服务一起使用 我必须使用 IF 和 ELSE IF 语句 感谢您的任何建议 Switch IsNothing Fields field date Value Fields set flag Value 1 Decli
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 如何使用 DateTime 执行 SQL NOT NULL?

    一个人如何处理DateTime with a NOT NULL 我想做这样的事情 SELECT FROM someTable WHERE thisDateTime IS NOT NULL But how 嗯 它有效吗 我刚刚测试过 Obje
  • 根据表sql中的行替换字符串中的字符

    我需要用一些映射的字符替换字符串中的字符列表 我有一个表 dbo CharacterMappings 有 2 列 CharacterToFilter 和 ReplacementCharacter 假设这个表中有3条记录 Filter Rep

随机推荐

  • Python Kolmogorov-Smirnov 拟合优度检验中的 p 值非常低

    我有一组数据 并通过对数正态分布拟合相应的直方图 我首先计算对数正态函数的最佳参数 然后绘制直方图和对数正态函数 这给出了相当好的结果 import scipy as sp import numpy as np import matplot
  • 组合多个 Node.js Web 应用程序

    我正在努力找出实现这一目标的最佳方法 本质上 我有大约 6 个网站需要上网 但目前它们的流量几乎为零 因此为了节省资金 它们需要部署在同一台服务器上 理想情况下我们将使用 AWS 的 Elastic BeanStalk 有没有一种方法可以像
  • WEB API Action Method 的返回类型应该是什么?

    我正在使用 NET Core 开发 ASP NET Web API 该Web API将主要由UI应用程序访问 UI将使用ASP NET Core MVC开发 但将来API也可能被其他应用程序访问 在我的 WEB API 中 所有方法都是异步
  • Socket.io 发出进度检查

    我使用 Socket io 来上传文件 它适用于以下架构 客户端 从输入读取文件并将其编码为 Base64 并压缩 客户端 发出 Socket io 事件 上传 包括压 缩文件作为数据片段 服务器 监听 上传 事件 解压缩并解码文件并保存
  • PDOException 找不到驱动程序

    我正在使用 symfony 当我在控制台中输入以下内容时 php app console doctrine schema create 我有接下来的错误 学说 DBAL 异常 DriverException 驱动程序出现异常 找不到驱动程序
  • 使用多个分隔符并保留每个分隔符有效地分割字符串?

    我需要使用每个字符来分割数据字符串string punctuation and string whitespace作为分隔符 此外 我需要将分隔符保留在输出列表中 位于它们在字符串中分隔的项目之间 例如 Now is the winter
  • 如何显示接口方法的所有实现实例?

    在我的项目中 使用了大量的接口类 我在阅读和理解代码时遇到困难 因为浏览代码的定义 通过选择方法名称并按 F12 或右键单击 转到定义 只会引导我进入界面 Visual Studio 2010 中是否有一种方法 内置或插件 可以列出接口方法
  • Vagrant:缺少文件 id_rsa

    我正在使用带有 homestead 的 Windows 并且尝试在命令行上输入 vagrant up 但出现此错误 C www Homestead scripts homestead rb 106 inread No such file o
  • 使用Qt4捕获多个屏幕桌面图像

    我正在用 C 在 Qt4 中编写屏幕捕获应用程序 我在双屏上调整时遇到问题 我无法使用第二个屏幕获取图像 我尝试了一个 C 应用程序 它将抓取一个图像中的所有桌面 我可以从那里提取每个屏幕桌面图像 这是c 代码 using System u
  • 链接 pthread 库问题

    我面临着一个解释和理解可能稍微复杂的问题 因为给出整个图片太大且困难 请原谅 考虑以下 Makefile all clients so simulator backup LD PRELOAD home Juggler client clie
  • Gradle 工具 api 获取任务输出

    借助 Gradle 工具 API 我成功获得了一些项目的任务列表GradleProject getTasks 这有点酷 我可以读取任务的名称 描述 组以及是否公开 我想知道是否有可能获得任务输出目录 特别是对于测试或代码覆盖率的内容 即生成
  • 服务器上的自动化 django 接收钩子:用“yes”响应collectstatic

    我正在使用 Github post recieve hook 来运行一个 bash 文件来提取我的两个存储库 bin sh cd public html repo static env i usr bin git pull origin m
  • 如何将 gradle 多项目存储库作为 git 子模块包含在另一个 gradle 项目中

    我正在尝试将 Gradle 多项目存储库作为 git 子模块导入到另一个 Gradle 项目中 这是多项目存储库的结构 MyLibrary lib api api config api repository lib impl impl co
  • Angular Dart 教程第 5 节 - 'self.injector$Injector'

    在 英雄之旅 教程的第 5 节中 main dart包含以下行 最终 InjectorFactory 注入器 self injector Injector 这是拼写错误吗 它在 VSCode 中向我发出警告 我遇到了同样的问题 因为它完成没
  • “存在(从...中选择 1)”这一做法从何而来?

    The 绝大多数人支持 https stackoverflow com questions 424212 performance of sql exists usage variants我个人认为以下说法没有区别 SELECT FROM t
  • MongoDB.service 失败,结果退出代码

    我无法使用命令 sudo systemctl start mongod 启动 mongoDB 我收到以下消息 mongod service MongoDB Database Server Loaded loaded lib systemd
  • Android 无尽列表内存管理

    我通过在 onScrollStateChanged 方法中将更多项目加载到数组列表来实现无限列表视图 如果我实现这个方案来获取超过 100 万个条目 我将向数组列表添加一百万个对象 这是内存密集型的 我可以使用哪些方案来实现高效的内存管理
  • 如何从用户控件调用方法到aspx页面?

    我想从用户控件调用一个方法到aspx页面 我正在尝试 但无法在 aspx 页面中调用该方法 Code 添加VisaUserControl ascx cs public event EventHandler UserControlButton
  • 顶级批处理模式下的 CPU 使用率

    我有一个让我生气的问题 我使用以下命令以批处理模式运行 top top b n 1 问题是我可以在批处理模式下运行 top 100 次 但 CPU 使用率永远不会超过原始值 内存使用量按预期变化 但 CPU 保持不变 如果我同时在不同的窗口
  • 使用 Transact-SQL 查找特定子字符串

    我需要从以下形式的字符串中提取特定的子字符串 foo abc bar def baz ghi 例如 我如何从该字符串中获取 bar 的值 您可以使用字符索引 http msdn microsoft com en us library ms1