Mysql:查询下表

Mysql:查询下表,mysql,concatenation,user-defined-functions,string-concatenation,Mysql,Concatenation,User Defined Functions,String Concatenation,我有下表: |-------------------| |id |家庭电话| |-------------------| | 1 | 454454125 | | 2 | 47872154587 | | 3 | 128795423 | | 4 | 148784474 | |-------------------| 我的桌子上大约有40000行 我想将Homephone值格式化如下: 454-454-125 478-721-545-87 128-795-423 148-

我有下表:

|-------------------|
|id |家庭电话|
|-------------------|
| 1  | 454454125    |
| 2  | 47872154587  |
| 3  | 128795423    |
| 4  | 148784474    |
|-------------------|
我的桌子上大约有40000行

我想将
Homephone
值格式化如下:

454-454-125
478-721-545-87
128-795-423
148-784-474
i、 e.在每3个我想要的数字之后
-
(连字符)。

如何使用MySQL实现这一点?

您需要为这一点找到解决方案基本上,您需要创建自己的函数(所谓的-用户定义函数)并在表上运行它。

在MySQL参考手册的一章中发布了AndrewHanna的一个不错的函数。我修复了一个小错误(将
WHILE(IWHILE(I当前的mysql代码是什么?您尝试了什么?如果是一个网站,您是否碰巧使用了服务器端语言?(PHP、JSP、Python、Perl…)在PHP应用程序中我想要这个,但在phpmyadmin中我创建了一个没有连字符(-)的表对于homephone专栏,但我现在想更改。。。。。。。。。
DELIMITER //
CREATE FUNCTION insert_characters(str text, pos int, delimit varchar(124))
RETURNS text
DETERMINISTIC
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE str_len INT;
    DECLARE out_str text default '';
    SET str_len = length(str);
    WHILE (i <= str_len) DO
        SET out_str = CONCAT(out_str, SUBSTR(str, i, pos), delimit);
        SET i = i + pos; 
    END WHILE;
    -- trim delimiter from end of string
    SET out_str = TRIM(trailing delimit from out_str);
    RETURN(out_str);
END//
DELIMITER ;
SELECT insert_characters(Homephone, 3, "-") AS new_phone FROM my_table;
UPDATE my_table SET Homephone = insert_characters(Homephone, 3, "-");