如何分离字符串输出?

时间:2014-08-15 15:34:51

标签: sql

我有一个输出列名member_name

的查询
select 
LEFT(member_name, charindex('/', member_name) - 1) + ' ' 
+ SUBSTRING(member_name, charindex('/', member_name) + 1, 1) as member_name

from member

输出带姓氏和名字首字母的字符串。

如何在表格中输出不同列中的第一个字母和姓氏?

例如,让它输出如下内容:

first | last name 
-----------------
J     | DOE

B     | DOE-DOE

Z     | SMITH 

我做了http://sqlfiddle.com/#!6/c7a74/7

3 个答案:

答案 0 :(得分:4)

select 
   substring(member_name, charindex('/', member_name) + 1, 1) as first_initial,
   left(member_name, charindex('/', member_name) - 1) as last_name
from
   member

答案 1 :(得分:1)

我还没有回复评论的声誉,但正如你在答案中的评论中所说,可以在冷聚合中完成,但我' d认为SQL是你更好的选择。

<cfoutput query="get_names">
  <cfset l_name = listfirst(member_name,"/")>
  <cfset f_initial = left(listlast(member_name,"/"),1)>
  <!--- if you want f_initial capitalized, use the below cfset rather than the above --->
  <cfset f_initial = ucase(left(listlast(member_name,"/"),1))>

  First initial: #f_initial#, Last name: #l_name#<br>
</cfoutput>

这会根据你的小提琴输出:

First initial: J, Last Name: suarez
First initial: J, Last Name: suarez
First initial: S, Last Name: mejia
First initial: D, Last Name: orozco

这是一个很好的练习,可以帮助理解cf的工作原理,更重要的是,您的查询可以为您做什么以及您的代码可以重叠,但再次我推荐sql解决方案。

答案 2 :(得分:0)

虽然我认为处理这种情况的最佳方法是在我的另一个答案中修改SQL,这里只是基于你的小提琴数据布局在CF中进行修改的方法。

<cfquery name="getMembers">
   select member_name from member
</cfquery>

<table>
   <tr><td>First</td><td>Last Name</td></tr>
   <cfoutput>
      <cfloop query="getMembers">
         <cfset aMember = ListToArray(member_name, "/")>
         <tr><td>#left(aMember[2],1)#</td><td>#aMember[1]#</td></tr>
      </cfloop>
   </cfoutput>
</table>