2013-07-24 71 views
0

我有雇员表具有以下结构和数据。从记录中检索字符串值并插入另一列

id  name  empDetails             phone 
1  John  phone:7845982563,pinCode:7895645,subCode:22  
2  pitt  phone:7889451524,pinCode:2565479,subCode:24 
3  ken  empId:3243,phone:283241524,pinCode:2563479,subCode:25 
4  rancho  empId:3263,phone:454424154,pinCode:5565479,subCode:24 
.   .     . 

Sometimes phone poistion will be after empId also. 

现在我要检查,如果列empDetails

有串手机,如果是,那么得到的电话号码,并将其插入新手机列在同一排。

我们可以通过这种方式检查记录是否包含字符串电话。

SELECT employee.empDetails FROM employee WHERE employee.empDetails LIKE '%phone:%' 

但我们如何检索电话号码并将其插入另一列以记录相同的记录?

感谢, 雅利安

+1

你为什么不分开的数据?为电话,pinCode,subCode等分列?这将使检索信息变得更容易。如果这种情况下许多参数可能没有值,那么您可以始终将这些信息存储在垂直表中,并将其加入用户的ID中。 – mcriecken

回答

1
SELECT replace(SUBSTRING_INDEX(empDetails,',',1),'phone:','') as phone 
FROM Table1 
where empDetails REGEXP '[[:<:]]phone[[:>:]]'; 

入住这里工作小提琴: http://sqlfiddle.com/#!2/802d2/18

请去spaceman817的建议,使用单独的列。

希望这会有所帮助。

〜ķ


假如您的手机可以在任何位置开始,中间&结束。例如:下面的查询

(1, 'John', 'phone:7845982563,pinCode:7895645,subCode:22'), 
(2, 'pitt', 'pinCode:2565479,subCode:24,phone:7889451524'), 
    (3, 'vk', 'pinCode:2565479,phone:7889451524,subCode:24'); 

用途:

SELECT 
replace(SUBSTRING_INDEX(SUBSTRING(empDetails,LOCATE('phone:',empDetails)),',',1),'phone:','') as phone 
FROM Table1 where empDetails REGEXP '[[:<:]]phone[[:>:]]'; 

---输出---

PHONE 
7845982563 
7889451524 
7889451524 

检查更新sql fiddle with working example

希望这将帮助!

+0

但是我的String'phone'位置不固定,有时它在empId后面。我已经更新了我的问题 – Java

+0

你可以在php中使用''爆炸,检查电话并获取价值。 –

+0

不,我不使用PHP ... – Java

2
update employee.empDetails set phone = cast(replace(empDetails, 'phone:', '') as unsigned) 
where employee.empDetails LIKE '%phone:%' 

假设的电话号码将始终为前缀的电话:“
不干净的答案。但会做的伎俩:)

+0

感谢您回复@Akhil,但我不想从empDetails列中删除任何内容。 – Java

+0

我们只更新手机领域。不触摸/更新empDetails列 – Akhil

+0

是的,你是真实的,但我的字符串电话位置不固定,有时它在empId后。我更新了我的问题。所以你的回答只有在手机处于第一位时才有效。 – Java

0

尝试

update employee set 
phone = SUBSTR(SUBSTRING_INDEX(empDetails,'phone:',-1) from 1 for instr(SUBSTRING_INDEX(empDetails,'phone:',-1),',')-1) 
where employee.empDetails LIKE '%phone:%' 

PLZ看到http://sqlfiddle.com/#!2/10c8c4/40

相关问题