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