我从来没有真正使用过sql,但最近由于在家工作的变化,迫使我在这方面获得一些知识。到目前为止,我一直做得很好,但我现在遇到了一个似乎找不到解决办法的问题。
我有一个excel表格,它通过vba代码运行的sql查询来提取客户信息。
我首先需要做的是从一个客户那里得到一个全名,并将其输入到表单中。这个很好用。我对此使用以下查询:
Select concat(concat(Customer_First_Names,' '), Customer_Last_Name) FROM CustomerInformationTable where Customer_Number = &&1
这给我一个客户的全名,名字和姓氏之间以及名字之间的空格(全名在表中已经用空格隔开)。
现在,我收到了另一个请求,请求不检索客户的第一个完整的名字和姓氏,而是检索他们的首字母和姓氏。
例如:
巴拉克·侯赛因·奥巴马
会变成
b。h。奥巴马
为此我需要做两件事:
我需要更改查询以只检索每个名字的缩写。如我所说,所有完整的名字(即使客户有一个以上的名字)都位于customer\u first\u names列中。
我需要在每个首字母后面加一个点和一个空格。
我该怎么办?我一直在考虑使用子字符串,但我正在努力如何做到这一点,如果有一个以上的名字。
所以这是行不通的:
Select concat(substr(Customer_First_Names, 1, 1), '. ') from CustomerInformationTable where Customer_Number = &&1
很抱歉,如果到目前为止董事会上已经有人问过这个问题,我看了一下,但没有找到合适的解决办法。
1条答案
按热度按时间qvk1mo1f1#
假设你不想看到只有一个名字的人后面有两个点(比如j。。史密斯),那么这里有一个解决方案,适用于postgres。不确定您的数据库是什么,所以您可能需要根据需要进行调整。
“with”查询正在拆分名字,限制为两个。“case”语句然后检查此人是否有第二个名字。如果不是,则只提供第一个首字母,后跟一个点。否则,两个首字母后面都跟一个点。最后的结果是,所有的首字母和名字用空格隔开(比如t。r。史密斯)。
一张这样的table:
cid前最后
1杰克·史密斯
2特雷尔·霍华德·威廉姆斯
3菲比m凯蒂
将使用下面的查询生成以下结果。
cid客户名称
1 j。史密斯
2吨。h。威廉姆斯
下午3点。m。凯蒂