仅当存在字符时,选择中的MySQL子字符串

仅当存在字符时,选择中的MySQL子字符串,mysql,substring,locate,Mysql,Substring,Locate,A有一个由自动流程填充的表,该流程包含来自第三方提要的数千个公司名称。大多数公司名称只是名称,但有些公司名称后面有连字符。我正在尝试执行一个只返回公司名称的选择。现在我有两个问题: SELECT DISTINCT vendor FROM feed_data; SELECT DISTINCT SUBSTRING(vendor, 1, LOCATE(' - ', vendor)) FROM feed_data; 第一个查询提供了所有信息,第二个查询只提供了带有连字符的公司名称。我正在寻找一种方法,

A有一个由自动流程填充的表,该流程包含来自第三方提要的数千个公司名称。大多数公司名称只是名称,但有些公司名称后面有连字符。我正在尝试执行一个只返回公司名称的选择。现在我有两个问题:

SELECT DISTINCT vendor FROM feed_data;
SELECT DISTINCT SUBSTRING(vendor, 1, LOCATE(' - ', vendor)) FROM feed_data;
第一个查询提供了所有信息,第二个查询只提供了带有连字符的公司名称。我正在寻找一种方法,两者兼得

样本数据:

vendor:
American Widgets
Bravo Widgets - The best widgets money can buy

此外,此查询实际上是填充菜单的较大查询的子查询部分,因此可能会限制可能的解决方案。

使用union-每一半一个查询:

SELECT DISTINCT 
    SUBSTRING(vendor, 1, LOCATE(' - ', vendor))
FROM feed_data
where vendor like '%-%'
union
SELECT DISTINCT
    vendor
FROM feed_data
where vendor not like '%-%';
或者,使用
if()

或者,使用
案例

SELECT DISTINCT
    case
        when vendor like '%-%' then SUBSTRING(vendor, 1, LOCATE(' - ', vendor))
        else vendor
    end
FROM feed_data;
使用此查询:

select distinct 
     if(LOCATE(' - ', vendor)>0, SUBSTRING(vendor, 1, LOCATE(' - ', vendor)), vendor)
from feed_data;

类似的内容可能是(它将为所有供应商提供一个附加字段,以说明是否使用连字符)

这一个将为您提供所有替换了
-
的供应商的结果

select distinct 
(case when LOCATE('-', vendor) >= 0 then SUBSTRING(vendor, 1, LOCATE(' - ', vendor))
 else vendor) as myvendor from feed_data;

完美的简单,直截了当,工作起来很有魅力!谢谢
SELECT distinct vendor,
(case when LOCATE('-', vendor) >= 0 
then 'True'
else 'False' end) as IsVendorWithHiphen
FROM feed_data;
select distinct 
(case when LOCATE('-', vendor) >= 0 then SUBSTRING(vendor, 1, LOCATE(' - ', vendor))
 else vendor) as myvendor from feed_data;