【问题标题】:SQL new column with pattern match具有模式匹配的 SQL 新列
【发布时间】:2011-11-07 15:56:50
【问题描述】:

我有一列的 url 字符串看起来像这样

http://www.somedomain.edu/rootsite1/something/something/ 或者 http://www.somedomain.edu/sites/rootsite2/something/something

基本上我只想将字符串返回到根站点(在另一列中).. 根站点可以是任何东西(但 /sites),但它会跟随 /sites/ 或 .edu/

所以上面的两个字符串会返回:

http://www.somedomain.edu/rootsite1
http://www.somedomain.edu/sites/rootsite2

我不能用 CLR 编译视图,所以我不认为 Regex 是一个选项。

感谢您的帮助。

【问题讨论】:

  • 'rootsite' 的典型值是什么?如果你要使用字符串函数,这是很重要的一点。
  • 部分 url .. 可以是任何字符串并且可以包含 %20
  • 那么您将如何定义,技术上,在哪里剪切 URL?
  • @Tomalak:继续他的例子,它似乎在第一个目录之后,经过/sites/.edu/

标签: sql tsql pattern-matching design-patterns substr


【解决方案1】:

我认为通过在客户端拆分 URL 并将其作为两部分保存在表中(一个包含“根”站点,另一个包含特定于站点的路径),然后将它们放入,我认为您会做得更好检索后在客户端重新组合在一起。

如果您选择将它们存储在如上所述的表中,您可以使用CHARINDEX 来确定@​​987654322@ 或/sites/ 在字符串中出现的位置,然后使用SUBSTRING 将其分解为基于那个索引。

如果你真的需要这样做,这里有一个例子:

declare @sites table (URL varchar(500))

insert into @sites
values
('http://www.somedomain.edu/rootsite1/something/something/'),
('http://www.somedomain.edu/sites/rootsite2/something/something')

select
    URL,
    SUBSTRING(URL, 1, case when charindex('/sites/', URL) > 0 then 
        charindex('/', URL, charindex('/sites/', URL) + 7) else 
        charindex('/', URL, charindex('.edu/', URL) + 5) end - 1)

from @sites

【讨论】:

  • yes.. 将字符串按“/”拆分为标记,然后为我猜想的站点设置条件.. 我将如何在内联视图中做到这一点?
  • @cyberpine:不需要按令牌拆分。我仍然建议不要在数据库中这样做,但如果你必须这样做,我会发布一个示例。
  • 如果你有一个内联 sql 选择示例,我想看看。如果我不能在视图中执行此操作,我将不得不在 jquery 客户端代码中执行,而不是因为一旦我有了该列,我希望将它用于在视图中进行排序和不同的数据集选择。谢谢!
  • @cyberpine:我的意思是您不应该在数据库中执行拆分。如果您的数据实际上代表一个“根”站点以及其中的相对路径,那么以这种方式存储您的数据。当您的客户端插入 URL 时,在客户端代码中执行该拆分并将两个值插入两个不同的列中。当您的客户端检索 URL 时,将这两个值合并为一个 URL。在数据库中进行这种字符串操作将完全消除索引的可能性。考虑到您的目的是排序和过滤,因此需要建立索引。
【解决方案2】:

您可以使用 CHARINDEX、LEN 和 SUBSTRING 来执行此操作,尽管我不确定 sql 是否是执行此操作的最佳位置

DECLARE @testStr VARCHAR(255)
SET @testStr = 'http://www.somedomain.edu/rootsite1/something/something/'

PRINT SUBSTRING(@testStr, 0, CHARINDEX('.edu', @testStr))

不是一个完整的解决方案,但应该给你一个开始

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2018-05-26
    • 2018-11-14
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多