Tsql 如何从字段中解析出不需要的文本数据

Tsql 如何从字段中解析出不需要的文本数据,tsql,ssms-2014,Tsql,Ssms 2014,我正在使用sequel server management studio 2014,我想知道如何解析select查询中的无关数据。我不想修改数据,只想从中获取SSRS数据源所需的数据,以自动执行查询。查询将类似于下面列出的内容 注释字段中的值示例如下所示 '基于PO 105680-Thomas测试GRPO接收验证查询测试' 理想情况下,我只需要值“105680”,以便可以将其用作查找引用。我们将一如既往地感谢您的帮助 SELECT [DocEntry] ,[DocNum] ,[Do

我正在使用sequel server management studio 2014,我想知道如何解析select查询中的无关数据。我不想修改数据,只想从中获取SSRS数据源所需的数据,以自动执行查询。查询将类似于下面列出的内容

注释字段中的值示例如下所示 '基于PO 105680-Thomas测试GRPO接收验证查询测试'

理想情况下,我只需要值“105680”,以便可以将其用作查找引用。我们将一如既往地感谢您的帮助

SELECT
   [DocEntry]
  ,[DocNum]
  ,[DocType]
  ,[CANCELED]
  ,[Comments]
  FROM [Billy].[dbo].[OPDN]

您可以使用CHARINDEX在文本中查找PO,然后使用子字符串解析出数字,只要格式一致

;WITH TEMP AS (SELECT  'Based on PO #105680 - Thomas Test GRPO Reciept Validation query test' AS comment )

SELECT comment, 
    CASE WHEN TEMP.comment LIKE '%PO #%' THEN SUBSTRING(TEMP.comment, CHARINDEX('PO #', TEMP.comment) + 4, CHARINDEX('PO #', TEMP.comment, CHARINDEX(' ', TEMP.comment) + 1) - 4) END AS PO_NUM
FROM TEMP
您的查询类似于

SELECT
   [DocEntry]
  ,[DocNum]
  ,[DocType]
  ,[CANCELED]
  ,[Comments]
  ,CASE WHEN Comments LIKE '%PO #%' THEN SUBSTRING(Comments, CHARINDEX('PO #', Comments) + 4, CHARINDEX('PO #', Comments, CHARINDEX(' ', Comments) + 1) - 4) END AS PO_NUM
FROM [Billy].[dbo].[OPDN]

你能不能更含糊一点你的算法来确定任何给定字符串中的好位?这种情况可能会不时发生变化,例如想要公司名称而不是P.O?你试过什么了?问候,我很抱歉说得含糊不清,我真的试着说得很具体,但没有达到目的。有适当的逻辑来插补“基于PO”的值,也有逻辑包括空格、连字符和后面的备注。我的理想解析将只包括磅号之后和-,之前的空格之前的数据。如果需要进一步解释,请让我知道。谢谢你的回复,我会在最初的查询后加入上面的示例并一起执行吗?@Thomas-我想你真的只需要案例陈述就可以用于你的领域。谢谢你,我的朋友,我非常感谢你的帮助。今天下午我将尝试并标记为已解决,一旦我可以验证它是否有效。