刮掉字符前后的 SQL 数据
Posted
技术标签:
【中文标题】刮掉字符前后的 SQL 数据【英文标题】:Shaving off SQL data before and after character 【发布时间】:2017-10-02 20:15:51 【问题描述】:我试图在 _ 字符之前和之后提取 SQL 数据,但是每个字符串中有多个 _。
例如,在字符串02_HVDO_HistoryOfScience_100__517
中,我只希望结果为HistoryOfScience
或任何最长的单词字符串。
我该怎么做呢?
【问题讨论】:
编辑您的问题并标记您正在使用的数据库。并解释你是如何到达“HistoryOfScience”的,而不是说“HVDO”或“100”。 您可以在 Redshift 中使用 python UDF 来执行此操作。需要帮助吗? Sam,请看看下面我的解决方案,如果它适合你,请“接受”。 【参考方案1】:这应该可行
create or replace function f_longest_substring (s varchar(max))
returns varchar(max)
stable
as $$
def f_longest_substring(input_string):
parts = input_string.split("_")
largest_string=""
for part in parts:
if len(part)>len(largest_string):
largest_string=part
return largest_string
return f_longest_substring(s)
$$ language plpythonu;
select f_longest_substring ('02_HVDO_HistoryOfScience_100__517');
【讨论】:
【参考方案2】:假设 MS-SQL Server,您可以从here 创建拆分函数
CREATE FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
并用于获得结果:
SELECT TOP 1 * FROM dbo.fnSplitString('02_HVDO_HistoryOfScience_100__517','_')
ORDER BY LEN(splitdata) DESC
【讨论】:
糟糕。没看到那个标签!以上是关于刮掉字符前后的 SQL 数据的主要内容,如果未能解决你的问题,请参考以下文章
高手,在sql语句里如何提取出分隔符前后的字符???不要太长的。