【问题标题】:SQL Server 2005 Find the all the characters in between ##----## of column rowSQL Server 2005查找列行##----##之间的所有字符
【发布时间】:2011-06-10 07:26:56
【问题描述】:

我有一个表模板,其中包含以下列:

ID,[文本]


假设我在一个模板表中有两条记录,

1, '他的全名是##Full_Name##,他于##Date_of_Birth## 出生于##Place_of_Birth## 市'

2,'我是##First_Name##,我出生于##Date_of_Birth##'


我想连续查找##Full_Name##、##Date_of_Birth## 和##Place_of_Birth##。

在另一行可以有两个匹配结果,分别是 ##First_Name## 和 ##Date_of_Birth## 。

两条记录的输出是这样的:

1、Full_Name、Date_of_Birth、Place_of_Birth

2、First_Name、Date_of_Birth


谁能帮帮我?

【问题讨论】:

  • 请问输出应该是什么样子的?
  • 良好的格式是你的朋友。
  • 输出中通常有多少列?从你的描述看不太清楚。
  • @Andriy-M 两列,一列包含 ID,另一列包含提取的单词,如 Full_Name、Date_of_Birth、Place_of_Birth。这三个词将从整个句子中提取出来,并用逗号分隔在一个列中,这将是第二列。

标签: sql sql-server sql-server-2005 tsql


【解决方案1】:

这里是:

DECLARE @Text NVARCHAR(MAX)
SET @Text ='His full name is ##Full_Name##,he was born on ##Date_of_Birth## in city of ##Place_of_Birth##'

DECLARE @Delimiter VARCHAR(1000)
SET @Delimiter = '##';

WITH 
    numbers(number)
      AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY o.object_id, o2.object_id ) Number
           FROM     sys.objects o
                    CROSS JOIN sys.objects o2
         ) ,
    counts ( began, number )
      AS ( SELECT   CHARINDEX(@Delimiter, @TExt, 0)
                  , 1
           UNION ALL
           SELECT   CHARINDEX(@Delimiter, @TExt, began + 1)
                  , number + 1
           FROM     counts
           WHERE    CHARINDEX(@Delimiter, @TExt, began + 1) > 0
         ) ,
    subs ( began, ends, number )
      AS ( SELECT   C.began + LEN(@delimiter)
                  , c2.began
                  , c.number
           FROM     counts C
                    INNER JOIN counts C2 ON c2.number = c.number + 1
           WHERE    C.number % 2 = 1
         )
SELECT  SUBSTRING(@TExt, began, ( ends - began )) Word
FROM    subs

【讨论】:

  • 以上代码不工作。我收到以下错误;无法为局部变量分配默认值。
  • @Alex-Aza, @Delex 谢谢你们俩。
【解决方案2】:

你可以实现 CLR Regex 函数。

这里是一个例子:Regular Expressions Make Pattern Matching And Data Extraction Easier

【讨论】:

  • 我想直接在SQL Server中做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2011-03-18
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多