如何编写Microsoft Query的SELECT语句在Excel中提取纯主域名
在Excel中提取纯主域名的SQL语句
嘿,这个需求我太懂了!要搞定这个,得先区分两种域名类型:单后缀域名(比如.com、.org)和双后缀域名(比如.co.nz、.co.uk这类国家顶级域名下的二级后缀),然后用Excel支持的Jet/ACE SQL函数来针对性截取。
假设你的域名数据在工作表Sheet1的Domain列里,完整的SELECT语句如下,把这个语句里的逻辑替换掉你说的“something”就行:
SELECT IIF( Domain LIKE '%.co.nz' OR Domain LIKE '%.co.uk' OR Domain LIKE '%.gov.uk' OR Domain LIKE '%.org.uk' OR Domain LIKE '%.ac.uk' OR Domain LIKE '%.co.au' OR Domain LIKE '%.net.au' OR Domain LIKE '%.org.au', IIF( InStrRev(Domain, '.', InStrRev(Domain, '.', InStrRev(Domain, '.') - 1) - 1) = 0, Domain, Mid(Domain, InStrRev(Domain, '.', InStrRev(Domain, '.', InStrRev(Domain, '.') - 1) - 1) + 1) ), IIF( InStrRev(Domain, '.', InStrRev(Domain, '.') - 1) = 0, Domain, Mid(Domain, InStrRev(Domain, '.', InStrRev(Domain, '.') - 1) + 1) ) ) AS PrimaryDomain FROM Sheet1;
语句逻辑拆解
我给你拆解开,你就能明白为啥这么写:
- 外层IIF:先判断域名是不是双后缀类型(比如
.co.nz),如果是就走双后缀的处理逻辑,否则走单后缀逻辑。 - 双后缀处理内层IIF:
- 先检查域名有没有3个及以上的层级(比如
foo.bar.co.nz有4层),如果没有(比如hey.co.uk只有3层),直接返回原域名; - 如果有多层,就从倒数第三个点的下一位开始截取,去掉最前面的子域名(比如把
foo.bar.co.nz变成bar.co.nz)。
- 先检查域名有没有3个及以上的层级(比如
- 单后缀处理内层IIF:
- 先检查域名有没有2个及以上的层级(比如
test.com只有2层),如果没有直接返回原域名; - 如果有多层,就从倒数第二个点的下一位开始截取,去掉最前面的子域名(比如把
sub.test.com变成test.com)。
- 先检查域名有没有2个及以上的层级(比如
测试你的例子
用你给的输入测试,结果完全符合预期:
sub.test.com→test.comtest.com→test.comfoo.bar.co.nz→bar.co.nzhey.co.uk→hey.co.ukwww.stackoverflow.com→stackoverflow.com
如果还有其他特殊后缀需要支持,直接在外层IIF的LIKE条件里加就行(比如.co.jp这类)。
内容的提问来源于stack exchange,提问作者LWC
相关产品推荐
相关产品推荐

