我有一张看起来像这样的表
| Domain | Owner | Nameservers |
__________________________________________
| Test1 | Person1 | Serv1, Serv2, Serv3 |
| Test2 | Person2 | Serv1 |
| Test3 | Person3 | Serv1, Serv2 |
我的计划是将名称服务器拆分为自己的列。 (我需要这个结构进一步导入第三方系统)..
| Domain | Owner | Nameserver1 | Nameserver2 | Namerserver3 |
_______________________________________________________________
| Test1 | Person1 | Serv1 | Serv2 | Serv 3 |
| Test2 | Person2 | Serv1 | | |
| Test3 | Person3 | Serv1 | Serv2 | |
表中的空格可以是空字符串或NULL。
我尝试过以下查询:
CREATE TABLE temp_import_table AS
SELECT domain,
owner,
SUBSTRING_INDEX( `nameservers` , ',', 1 ) AS nameserver1,
SUBSTRING_INDEX(SUBSTRING_INDEX( `nameservers` , ',', 2 ),',',-1) AS nameserver2,
SUBSTRING_INDEX( `nameservers` , ',', -1 ) AS nameserver3
但不知怎的,我得到以下结果:
| Domain | Owner | Nameserver1 | Nameserver2 | Namerserver3 |
_______________________________________________________________
| Test1 | Person1 | Serv1 | Serv2 | Serv3 |
| Test2 | Person2 | Serv1 | Serv1 | Serv1 |
| Test3 | Person3 | Serv1 | Serv2 | Serv2 |
正如您所看到的那样,名称服务器正在填充"之前的"即使名称服务器在csv字段中为空,也是如此。任何人都可以帮我摆脱/清空每行的重复值吗?
答案 0 :(得分:0)
更好的解决方案是放弃这个插件,但只是为了好玩......
SELECT * FROM my_table;
+--------+---------+--------------+
| Domain | Owner | Nameservers |
+--------+---------+--------------+
| Test2 | Person2 | Serv1 |
| Test3 | Person3 | Serv1, Serv2 |
+--------+---------+--------------+
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT DISTINCT domain
, owner
, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(nameservers,',',i+1),',',-1)) x
FROM my_table
, ints;
+--------+---------+-------+
| domain | owner | x |
+--------+---------+-------+
| Test2 | Person2 | Serv1 |
| Test3 | Person3 | Serv1 |
| Test3 | Person3 | Serv2 |
+--------+---------+-------+
答案 1 :(得分:0)
您可以计算多少','在SELECT domain,
owner,
SUBSTRING_INDEX( `nameservers` , ',', 1 ) AS nameserver1,
IF(
LENGTH(`nameservers`)-LENGTH(REPLACE(`nameservers`,',',''))>0,
SUBSTRING_INDEX(SUBSTRING_INDEX( `nameservers` , ',', 2 ),',',-1),
''
)AS nameserver2,
IF(
LENGTH(`nameservers`)-LENGTH(REPLACE(`nameservers`,',',''))>1,
SUBSTRING_INDEX( `nameservers` , ',', -1 ),
''
) AS nameserver3
中,然后使用if将其分开。
var re = /(bob)/gi;
var str = 'Hey, how are you doing? My name is Bob. I like to sleep. Bob\nHey, how are you doing? My name is Bob. I like to sleep. Bob\nHey, how are you doing? My name is Bob. I like to sleep. Bob\nHey, how are you doing? My name is Bob. I like to sleep. Bob\n';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}