我有一个包含网站列表的表格。
我有一个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重定向到根目录的网站呢?
答案 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'