将www.website.com和website.com与sql匹配

时间:2010-08-24 20:45:46

标签: c# sql asp.net-mvc regex

我有一个包含网站列表的表格。

我有一个sql变量@url,我想选择网站等于@url的所有行。但是,如果没有子域我想匹配www和根域。

所以,如果@url ='http://website.com',它应该匹配“http://website.com”和“http://www.website.com

我正在做

select * from websites a
where b.archived = 0
and @url like replace(a.WebsiteURL, '*', '%')
order by newid()

显然,这并没有考虑到www问题。

任何想法如何解决这个问题?

我正在考虑强制添加www。如果它不存在(并且url没有子域),则在将其添加到DB之前。但是,那些实际上没有www并将www重定向到根目录的网站呢?

3 个答案:

答案 0 :(得分:1)

您应该使用SQL的RegexMatch(或类似)功能。使用“http://(?:www.)?whatever.com”的正则表达式测试时,您应该匹配“http://whatever.com”和“http://www.whatever.com”。

答案 1 :(得分:0)

  http://website.com
   http://www.website.com

反转字符串

moc.etisbew//:ptth
moc.etisbew.www//:ptth

- 对输入字符串执行一次

Search Str = replace(replace(Str,'www',''),'http://')

也反转输入字符串

moc.etisbew

现在您可以搜索和使用索引了。您可以创建一个更新触发器来自动填充反向字段,该字段从不向用户显示,只显示可索引字段。

有点奇怪,但应该给你很好的查找性能

答案 2 :(得分:0)

您可以将WebsiteURL列分为WebsiteScheme,WebsiteSubdomain,WebsiteDomain列。因此,检查将转向:

@url = WebsiteScheme + '://' + WebsiteSubdomain + '.' + WebsiteDomain OR 
@url = WebsiteScheme + '://' + WebsiteDomain AND WebsiteSubdomain = 'www'