在 SQL Server 2008 中的符号之前隔离字符串中的子字符串

Posted

技术标签:

【中文标题】在 SQL Server 2008 中的符号之前隔离字符串中的子字符串【英文标题】:isolating a sub-string in a string before a symbol in SQL Server 2008 【发布时间】:2012-07-23 23:08:05 【问题描述】:

我正在尝试从字符串中提取子字符串(在这种情况下,连字符之前的所有内容),如下所示:

Net Operating Loss - 2007
Capital Loss - 1991
Foreign Tax Credit - 1997

并想要分别使用 SQL Server Management Studio 2008 的年份和名称(连字符前的子字符串)。有什么建议吗?或知道我该如何实现这一目标?

【问题讨论】:

【参考方案1】:
DECLARE @test nvarchar(100)

SET @test = 'Foreign Tax Credit - 1997'

SELECT @test, left(@test, charindex('-', @test) - 2) AS LeftString,
    right(@test, len(@test) - charindex('-', @test) - 1)  AS RightString

【讨论】:

应该 - 2 是 - 1 吗? 不行,char '-' 两边都有空格@MaxJ @pbordeaux - 啊,是的 - 错过了,抱歉。不是我需要这样做并忽略了的情况【参考方案2】:
DECLARE @dd VARCHAR(200) = 'Net Operating Loss - 2007';

SELECT SUBSTRING(@dd, 1, CHARINDEX('-', @dd) -1) F1,
       SUBSTRING(@dd, CHARINDEX('-', @dd) +1, LEN(@dd)) F2

【讨论】:

【参考方案3】:

这可以使用两个 SQL 函数来实现 - SUBSTRING 和 CHARINDEX

您可以按照上述答案将字符串读取到变量中,也可以将其添加到 SELECT 语句中,如下所示:

SELECT SUBSTRING('Net Operating Loss - 2007' ,0, CHARINDEX('-','Net Operating Loss - 2007'))

【讨论】:

以上是关于在 SQL Server 2008 中的符号之前隔离字符串中的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server 2005 迁移到 SQL Server 2008:强制在表名之前使用架构名

SQL Server 2008 – 无符号整数数据类型

格式化来自 SQL Server 2008 的 HTML 电子邮件中的查询数据

在迁移到 SQL Server 2008 之前将 MySQL SQL 模式设置为更严格

从 excel 导入数据时防止 SQL Server 2008 中的行重复

连接SQL SERVER 2008 R2显示超时间已到.在操作完成之前超时间已过或服务器未响应