我需要从SQL查询的结果中删除网址。所有网址看起来都像http://
,因此不需要复杂的正则表达式。但网址可以是字符串中的任何位置。
示例:
alpha beta http://alphabeta.com/abc
gamma http://gammadel.com/def delta
http://epsilo.com/ghi epsilon theta
如何从结果中删除这些网址以获取以下内容?
alpha beta
gamma delta
epsilon theta
注意:
http://
开头。答案 0 :(得分:2)
由于您无法使用preg_replace
这样的功能而没有任何插件/库 - 并且您只使用mysql
/ sql
标记了您的问题,因此您需要需要安装它才能让你使用正则表达式替换。 https://github.com/mysqludf/lib_mysqludf_preg#readme
现在已安装,您可以运行;
SELECT CONVERT(
preg_replace('/(http:\/\/[^ \s]+)/i', '', foo)
USING UTF8) AS result
FROM `bar`;
这会产生如下结果:https://regex101.com/r/qX6jB8/1
答案 1 :(得分:2)
怎么样?
SELECT REPLACE(
'alpha gamma http://gammadel.com/def delta beta',
CONCAT('http://',
SUBSTRING_INDEX(
SUBSTRING_INDEX('alpha gamma http://gammadel.com/def delta beta', 'http://', -1),' ', 1)
),''
);
我已经对您提供的字符串进行了测试,但不确定它是否完全符合您的要求。
基本上这段代码的作用是:
SUBSTRING_INDEX()
函数提取网址这是一个完整的查询来测试每个场景:
SET @str1="foo bar http://foobar.com/abc";
SET @str2="foo http://foobar.com/def bar";
SET @str3="http://foobar.com/ghi foo bar";
SELECT
REPLACE(
@str1,
CONCAT('http://',
SUBSTRING_INDEX(
SUBSTRING_INDEX(@str1, 'http://', -1),
' ', 1
)
),''
) AS str1,
REPLACE(
@str2,
CONCAT('http://',
SUBSTRING_INDEX(
SUBSTRING_INDEX(@str2, 'http://', -1),
' ', 1
)
),''
) AS str2,
REPLACE(
@str3,
CONCAT('http://',
SUBSTRING_INDEX(
SUBSTRING_INDEX(@str3, 'http://', -1),
' ', 1
)
),''
) AS str3
;
返回(按预期):
foo bar
foo bar
foo bar
答案 2 :(得分:0)
+1代表Jakub(功能为+10,娱乐性为-9)。我正在发布他的回答的这种可憎的内容,这样我就不会丢失它,并且可以节省一个人的时间。
采用varchar(255)的零件号字段和带有varchar(255)的描述字段的concat,修剪,剥离链接,剥离新行,防止零件号在描述中重复,并将其格式化以插入2个连续的char(30)个字段...
SELECT SUBSTRING(
TRIM(CONCAT(
CONCAT(
TRIM(REPLACE(REPLACE(REPLACE(REPLACE(
pi.part_number, CONCAT('https://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.part_number, 'https://', -1), ' ', 1)), ''
), CONCAT('http://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.part_number, 'http://', -1), ' ', 1)), ''), '\n', ''), '\r', ''))
, ' '
),
TRIM(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(
pi.description, CONCAT('https://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.description, 'https://', -1), ' ', 1)), ''
), CONCAT('http://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.description, 'http://', -1), ' ', 1)), ''), '\n', ''), '\r', ''),
TRIM(pi.part_number), ''
))
))
, 1, 30
) AS PDDSC1,
SUBSTRING(
TRIM(CONCAT(
CONCAT(
TRIM(REPLACE(REPLACE(REPLACE(REPLACE(
pi.part_number, CONCAT('https://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.part_number, 'https://', -1), ' ', 1)), ''
), CONCAT('http://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.part_number, 'http://', -1), ' ', 1)), ''), '\n', ''), '\r', ''))
, ' '
),
TRIM(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(
pi.description, CONCAT('https://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.description, 'https://', -1), ' ', 1)), ''
), CONCAT('http://', SUBSTRING_INDEX(SUBSTRING_INDEX(pi.description, 'http://', -1), ' ', 1)), ''), '\n', ''), '\r', ''),
TRIM(pi.part_number), ''
))
))
, 31, 30
) AS PDDSC2
FROM purchase_request_items pi