【问题标题】:Get numbers from string and convert to columns [duplicate]从字符串中获取数字并转换为列[重复]
【发布时间】:2019-12-19 01:55:11
【问题描述】:

我在 sql server 中有以下字符串,其中长度是可变的

Test No [012345678] - Result Code/Desc [53015 / Ptq Last Test]
Test No [25688] - Result Code/Desc [123/ Testing Testing Last] 
Test No [456987] - Result Code/Desc [1234 / Last test test]

如何在列中选择测试编号“012345678”、结果代码“53015”和描述“Ptq Last Test”? (我的表格中的数字和描述有不同的长度/大小) 基本上结果应该是这样的:

测试代码描述 12345678 53015 Ptq 最后测试 25688 123 测试 测试最后 456987 1234 最后一次测试测试

有什么想法吗? 谢谢

【问题讨论】:

  • 到目前为止你尝试过什么?你看看CHARINDEX/PATINDEX吗?
  • 'Test No [25688] - Result Code/Desc [123 / Testing Testing Last]' 是第二个输出条目的输入还是别的什么?
  • 另外,您有 3 个预期结果,但只有 1 个输入行?其他人从哪里来?
  • 我已经更新了描述以便更好地理解
  • 您可以使用 CHARINDEX 来查找子字符串的位置,而不仅仅是单个字符。看看CHARINDEX('No [', @string)CHARINDEX('Desc [', @string)的区别。

标签: sql-server


【解决方案1】:

希望对你有帮助:

Declare @string Varchar(max) =  'Test No [012345678] - Result Code/Desc [53015 / Ptq Last Test]'
declare @secondPoint int = Charindex(' - ', @string)+1
declare @secodpart varchar(max) = Substring(@string, @secondPoint,LEN(@string) - @secondPoint)
declare @lastBlock varchar(max) = Substring(@secodpart, Charindex('[', @secodpart) + 1, LEN(@secodpart))

select 
substring(
    @string,
    Charindex('[', @string)+1
    ,Charindex(']', @string) - Charindex('[', @string) -1
    ) as [Test No]
    ,
RTRIM(LTRIM(substring(  @lastblock, 0 , CharIndex('/', @lastblock)))) as [Code],
RTRIM(LTRIM(substring(@lastblock, CharIndex(' / ', @lastblock)+3 , Len(@lastblock) - CharIndex('/', @lastblock)))) as [Desc]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2011-05-27
    相关资源
    最近更新 更多