[英]How to select one column value, normalize and put to another column in mysql?
在我的表中,我有一個列 call mobile ,我需要將此mobile字段值標准化並保存到另一個列 call formatted_phone 。 為此,我使用了下面的 MySQL 查詢,不幸的是,它不起作用。 我把我的問題放在這里,請有人糾正。 謝謝你。
UPDATE hiring_detail
SET formatted_phone = replace(replace(
replace(replace(replace(replace(mobile,'-',''),'+',''),')',''),'(',''),' ',''),'.','')
WHERE mobile IS NOT NULL;
它拋出的錯誤:
SQL Error (1265):Data truncated for column 'formatted_phone' at row 3
移動列:varchar 50 formatted_phone:bigint 15
通常,在盲目執行UPDATE
命令之前,我們先做一個簡單的What If分析,只需將查詢作為SELECT
運行,這樣您就可以檢查輸出,重要的是,您可以將其與現有值進行比較:
http://sqlfiddle.com/#!9/47723a/2
SELECT mobile, formatted_phone
, REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(mobile,'-',''),'+',''),')',''),'(',''),' ',''),'.','') as test
FROM hiring_detail
WHERE mobile IS NOT NULL;
如果該邏輯適用於您(並且在我的測試中適用),那么您的UPDATE
邏輯應該沒有問題。
如果你的錯誤是
SQL 錯誤 (1265):第 3 行“formatted_phone”列的數據被截斷
那么這意味着您的格式化電話號碼長於formatted_phone
的列寬。 如果您知道長度是多少,則可以截斷格式化的號碼,但是對於電話號碼,如果我們刪除實際號碼,這通常會導致無法撥打電話號碼。
我建議您增加formatted_phone
字段的寬度。
這是強制截斷的示例:
UPDATE hiring_detail
SET formatted_phone = RIGHT(replace(replace(
replace(replace(replace(replace(mobile,'-',''),'+',''),')',''),'(',''),' ',''),'.',''),10)
WHERE mobile IS NOT NULL;
鑒於該列是一個 int,我們需要將該值轉換為一個整數。
UPDATE hiring_detail
SET formatted_phone = CAST(replace(replace(
replace(replace(replace(replace(mobile,'-',''),'+',''),')',''),'(',''),' ',''),'.','') as UNSIGNED INT)
WHERE mobile IS NOT NULL;
警告:不建議將電話號碼存儲為整數,前導零在許多地方的區號中可能很重要,將其存儲為數值可能會產生重大影響並可能導致數據丟失。 這也使得搜索數字的部分匹配變得困難。 您能想到的幾乎所有電話號碼操作(包括排序)都涉及字符串操作,而不是數學或數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.