我需要一个SQL查询来改变输出结果

时间:2014-05-30 10:49:38

标签: mysql sql alter

我想改变输出数据

--------------------------------------

| Name       | Phone      | Address  |

--------------------------------------

| Suwaid 068 | 7658945621 | 23/2 Myf |

| Akbar  0525 | 7658945621 | 23/2 Ngh |

| Shah   02513 | 7658945621 | 23/2 gju |

--------------------------------------

在输出中我希望将名称视为 Suwaid,Akbar,Shah

我应该使用什么SQL查询... 我的查询Select Name, Phone from Table1 ________

7 个答案:

答案 0 :(得分:2)

我会将substring_index()用于此目的。它是一个非常方便的函数,用于从分隔字符串中提取值:

select substring_index(name, ' ', 1) as name, address
from table t;

答案 1 :(得分:0)

因此,Name实际上包含两个数据,一个名称和一个数字,这是人们在数据库中可以避免的。但是,您要查找的是字符串函数,以获取空白之前的部分,即名称:

SELECT
  SUBSTRING( 1, INSTR(CONCAT(name, ' ') , ' ') - 1 as PureName,
  phone,
  address
FROM table1;

我使用CONCAT为Name真正包含名称的情况添加空格,因此INSTR会失败。

答案 2 :(得分:0)

在您的情况下,它将要求查询如下:

  1. 获取姓名并删除号码:

    with table1 as
    (
     select 'Suwaid 068' name, 7658945621 Phone, '23/2 Myf' Address from dual union 
     select 'Akbar  0525' name, 7658945621 Phone, '23/2 Myf' Address from dual union
     select 'Foo Bar 123' name, 7658945621 Phone, '23/2 Myf' Address from dual 
    )
    SELECT rtrim(name, '0123456789/') as Name,Phone, Address  FROM Table1 
    order by Name;
    
  2. 仅获取名字:

    SELECT NVL(substr(Name, 1, instr(Name,' ')), Name) as Name,Phone, Address  FROM Table1 
    order by Name;
    

答案 3 :(得分:0)

如果我正确理解您的问题,您会看到一个名为name的列,其中包含'Jack 123','Jill 345''Shah 02513'等字符串。具体来说,您的列包含文本,一个或多个空格,然后是数字。

你没有问过以这种方式格式化列是否是一个好主意,但无论如何我都会提供我的建议:它不是。

您需要的是一种仅提取文本的方法。 SUBSTRING_INDEX()MySQL function,非常适合这种情况。我也在这里使用TRIM(),以防在值的开头或结尾有空格。

SELECT SUBSTRING_INDEX(TRIM(Name), ' ',1) AS Name,
       Phone, Address
  FROM Table1

如果需要,您还可以使用SUBSTRING_INDEX(TRIM(Name), ' ', -1)检索Name列末尾的数字字符串。

答案 4 :(得分:0)

你可以使用它替换所有数字,即使你有Foo Bar 123 bar它也会给你纯名字。 Foo Bar bar

   SELECT
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Name,'9',''),'8',''),'7',''),'6',''),'5',''),'4',''),'3',''),'2',''),'1',''),'0','') as PureName,
 phone,
 address
FROM table1;

DEMO HERE

答案 5 :(得分:0)

如果您使用SUBSTRINGLOCATE功能获取相同内容(假设每个帖子的格式为string + space + numbers),该怎么办?

select substring(Name,1,locate(' ',Name)),
Phone from Table1

答案 6 :(得分:0)

我终于得到了你们所建议的结果。

Select NVL(substr(name,1,instr(name,' ')),name) as PureName,phone from table1