Mar*_*jak 16 mysql regular-expression
我有以下情况。我必须使用 MySQL 从描述中子字符串正则表达式。描述:
Lorem D9801 ipsum dolor 坐 amet
其中 D9801 是 REGEXP。每个强文本描述都有不同的内容,但我的正则表达式应该如下所示:REGEXP 'D[[:digit:]]{4}'
REGEXP 总是以“D”开头和“xxxx” - 4 位数字结尾:Dxxxx
我知道 REGEXP 只返回 true/false 值,但如何查询只返回“D9801”值?
我试过这样的事情:
SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的,所以我尝试这样做:
SELECT
id,
SUM(description REGEXP 'D[[:digit:]]{4}') AS matches,
CASE
WHEN (SUM(description REGEXP 'D[[:digit:]]{4}') > 0) THEN
SUBSTRING(description, LOCATE( /*POSITION_OF_REGEXP_IN_DESC*/ , description), 5)
ELSE 'Brak schematu'
END AS show_substr FROM ps_description GROUP BY id;
Run Code Online (Sandbox Code Playgroud)
但是如何找到正则表达式的位置?
我听说过 UDF 但我不能使用它,我使用 OVH 托管。
这需要使用LOCATE
andSUBSTRING
语法从字符串中获取信息。这里解释了您需要的基本定位语法。
LOCATE(搜索str,str,[位置])
search str = 将要搜索的字符串。
str=要搜索的字符串。
位置(可选)= 搜索开始位置(在第二个参数内)。
虽然解释了您需要的子字符串函数虽然此处
子字符串(str、pos、len)
str= 一个字符串。
pos= 起始位置。
len= 字符长度。
查看此问题的更简单方法是将子字符串视为以下 SUBSTRING(str FROM pos FOR len)
我用来获取第二个单词的语法如下,我利用了您尝试提取的第二个单词周围不断出现的空格。
declare @String varchar(50) ='Lorem D9801 ipsum dolor sit amet'
SUBSTRING
(
@String,
LOCATE(' ', @String),
LOCATE(' ', @String, (LOCATE(' ', @String) + 1)) - LOCATE(' ', @String)
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
56612 次 |
最近记录: |