簡體   English   中英

Select 一列中值的一部分並將其復制到另一列 - sql 查詢

[英]Select part of value in one column and copy it to another column - sql query

我有以下 sql 查詢需要修復以修剪選擇的任何空白(開頭和結尾)。 我還需要它從 firstname 列中刪除“lastname”部分:

UPDATE customer_address_entity
   SET lastname = RIGHT(firstname,LENGTH(firstname)-LOCATE(' ',firstname)) 
 WHERE lastname = ''

例如,如果“firstname”列中包含“Jo de blog”並且“lastname”列為空,我希望“firstname”列包含“Jo”,“lastname”列包含“de Blog”

我會這樣對待它。

當名字有 2 個姓氏時,它會取最后兩個當名字有 1 個姓氏時,它也只會取最后一個名字,名字中的單詞數量越來越多。 您需要更復雜的算法來找到正確的索引

CREATE TABLE customer_address_entity ( `id`INT, `firstname` varchar(25), `lastname` varchar(25) ); INSERT INTO customer_address_entity (`id`,`firstname`, `lastname`) VALUES (1,'Jo de blog ',''),(2,'Jo blog ',''),(3,'test2','test2');
 SELECT * FROM customer_address_entity
 編號 | 名字 | 姓氏 -: |:--------- |:-------- 1 | 喬德博客 |  2 | 喬博客 |  3 | 測試2 | 測試2
 UPDATE `customer_address_entity` SET `lastname` = TRIM(SUBSTRING_INDEX(TRIM(`firstname`), " ", IF(LENGTH(TRIM(`firstname`)) - LENGTH(REPLACE(TRIM(`firstname`), ' ', '')) > 1,-2,-1))), firstname = TRIM(SUBSTRING_INDEX(TRIM(`firstname`), " ", 1)) WHERE `lastname` = '';
 SELECT * FROM customer_address_entity
 編號 | 名字 | 姓氏 -: |:-------- |:-------- 1 | 喬 | 博客 2 | 喬 | 博客 3 | 測試2 | 測試2

db<> 在這里擺弄

這有點棘手,因為如果字符串以空格開頭,您的表達式將不會產生預期的結果。

我會使用:

substring(trim(firstname), locate(' ', trim(firstname)) + 1)

這基本上首先從字符串中刪除前導和尾隨空格,然后選擇字符串中第一個空格之后的所有內容。

在您的update聲明中:

UPDATE `customer_address_entity` 
SET `lastname` = substring(trim(firstname), locate(' ', trim(firstname)) + 1)
WHERE `lastname` = ''

如果名字和姓氏之間可能有多個空格,那么您也可以trim()結果字符串:

trim(substring(trim(firstname), locate(' ', trim(firstname)) + 1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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