【问题标题】:Microsoft SQL Server; Selecting SUBSTRING (FIXED LENGTH)微软 SQL 服务器;选择子串(固定长度)
【发布时间】:2014-12-22 16:06:14
【问题描述】:

我是 SQL 的初学者;我遇到了以下问题。

我需要从我的一列返回一个字符串值(包含 10 个字符)。但是,这一列充满了乱码(即不可用)

列中的行如下所示(数据已被匿名化):

2014-08-22 06:02:58.552:XXen:AAAAXXXXXXXbcod5fhuTGPfptufSLUp5MtVHbXuVSFkW8LJfdFkbYg==] 2014-08-22 06:02:59.417:获取客户资料成功。 XXNUMBER:2xxxxxx1。 ASDLJASDLKxxxx aksjdlXxx1213: 123111

后面是更多无用的字符。

因此,字符串包含各种字符;我正在寻找的部分是'XXNumber:2xxxxxx1',我需要返回'2xxxxxx1'。这个数字的长度是固定的(8 个字符)。

知道如何做到这一点(我是 SQL Management Studio),

非常感谢,

史蒂文

PS:我猜是某种 SUBSTRING 命令,但我有点被遗忘了。

【问题讨论】:

  • 这怎么可能既是mysql又是sql-server
  • 你说得对,我的错;想选择尽可能多的标签,但它们应该是相关的;)!

标签: sql-server substring fixed


【解决方案1】:

您可以使用 SUBSTRING() 和 CHARINDEX() 来做到这一点。例如:

DECLARE @string VARCHAR(MAX) = '2014-08-22 06:02:58.552: XXen: AAAAXXXXXXXbcod5fhuTGPfptufSLUp5MtVHbXuVSFkW8LJfdFkbYg==] 2014-08-22 06:02:59.417: Fetch customer profile success. XXNUMBER: 2xxxxxx1. ASDLJASDLKxxxx aksjdlXxx1213: 123111'

SELECT SUBSTRING(@string,CHARINDEX('XXNUMBER:',@string,1)+10,8)

返回:

2xxxxxx1

选择中的 +10 是 XXNUMBER 的字符串长度。

【讨论】:

  • 感谢您的回复;您建议的查询确实为我提供了一些输出;可悲的是不是正确的输出。这里的问题是声明的@string 具有可变长度,即它可以包含大约 300 到 400 个字符。此外,XXNumber 之前的字符数是可变的,2xxxxxx1 之后的字符数也是可变的(很高兴这部分是固定的,正如我已经提到的)。知道如何解决这个问题吗?
  • 我的公式符合您的要求 - 我只是通过将您的示例作为变量提供给您一个示例。只需将变量更改为您的字段名称:SELECT SUBSTRING(fieldname, CHARINDEX('XXNUMBER:',fieldname,1)+10,8) FROM tablename
【解决方案2】:

以下查询为我们提供了所需的输出:

select substring((SUBSTRING(columnname, CHARINDEX('xxnumber', columnname), 18)),11,8) as xxnumber from dbo.xxx

感谢您最初的回复,它为我们提供了解决手头问题所需的视角!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2018-06-14
    相关资源
    最近更新 更多