簡體   English   中英

如何在mysql中選擇一個列值,規范化並放入另一列?

[英]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;

更新 #2

鑒於該列是一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM