我有一个 vendors
我正在试验的数据库中的表,如下所示
当我运行下面的sql命令时
SELECT vendor_name
FROM vendors
ORDER BY vendor_name
LIMIT 10
我得到下面的输出
我的问题是我试图从每个词中提取第二个词 vendor_name
当第二个单词不存在时,它应该返回一个空白单元格。
下面是我为此编写的sql查询
SELECT vendor_name,
SUBSTRING(
SUBSTRING( vendor_name, LOCATE(' ', vendor_name) + 1),
1,
LOCATE( ' ', SUBSTRING( vendor_name, LOCATE(' ', vendor_name) + 1) ) - 1
) AS second_word
FROM vendors
ORDER BY vendor_name
LIMIT 10
下面是sql查询的输出
如果您从上面的输出中注意到 vendor_name
如果两个以上,则返回第二个单词正好,当 vendor_name
包含一个单词它会按预期返回一个空白单元格。
问题来的时候 vendor_name
只包含两个单词,而不是返回第二个单词,它返回一个空白单元格,例如在 American Express
以及 ASC Signs
.
如何更好地改进查询,以便即使 vendor_name
是否包含两个单词,是否返回第二个单词而不是空白单元格?
谢谢您。
3条答案
按热度按时间bd1hkmkf1#
我从@stick bit和@kiran gadhe那里得到了一些技巧,我提出了这个sql查询,它运行得很好
tez616oj2#
dsekswqp3#
这是因为在第二个单词后面没有空格,如果文本在那里结束,那么
locate()
找不到地方。快速破解:在结尾加一个空格。