gpt4 book ai didi

mysql - 如何在mysql中找到第一个大写字母的索引,西里尔字符

转载 作者:太空宇宙 更新时间:2023-11-03 12:25:42 25 4
gpt4 key购买 nike

我有一张包含地名的表格。有时他们前面有额外的字母。例如,如果城市名称是 Astana,则它是 s.Astana。我只需要得到阿斯塔纳这个地方的名字。我想使用 substr,但找不到第一个大写字母的索引。哦,使用了西里尔字符,这也是一个问题。我想举几个例子:

  1. Акмолинская область -> Акмолинская
  2. Кокшетау Г.А. -> Кокшетау
  3. г.Кокшетау -> Кокшетау
  4. Красноярский с.о. -> Красноярский
  5. с.Красный Яр -> Красный Яр

我尝试过的:创建了一个字段 short_nameru 并以这种方式更新它

UPDATE center_kato ck SET ck.short_nameru = case when 
LENGTH(SUBSTRING_INDEX(ck.nameru , ' ', -1)) > LENGTH(SUBSTRING_INDEX(ck.nameru , ' ',1))
then SUBSTRING_INDEX(ck.nameru , ' ', -1)
else SUBSTRING_INDEX(ck.nameru , ' ',1)
END

然后我又更新了它

UPDATE center_kato ck SET ck.short_nameru = case 
when LENGTH(SUBSTRING_INDEX(ck.short_nameru , '.', -1)) > LENGTH(SUBSTRING_INDEX(ck.short_nameru , '.',1))
then SUBSTRING_INDEX(ck.short_nameru , '.', -1)
WHEN LENGTH(SUBSTRING_INDEX(ck.short_nameru , '.', -1)) < LENGTH(SUBSTRING_INDEX(ck.short_nameru , '.',1))
then SUBSTRING_INDEX(ck.short_nameru , '.',1)
ELSE ck.short_nameru
END

但我丢失了一些需要的值。 "зимовка Туяк" 变成了 "зимовка" 但我需要 "Туяк"

最佳答案

您可以使用 SUBSTRING_INDEX功能:

SELECT
SUBSTRING_INDEX(city, '.', -1) as Place
FROM
yourtable

负值 (-1) 将从字符串的尾部执行反向搜索并返回尾部(最右侧)部分。

编辑

根据上面的示例数据,我认为此查询应该返回您需要的内容:

SELECT
yourtable.id,
SUBSTRING_INDEX(SUBSTRING(city, first_upper), ' ', 1) city_name
FROM
yourtable INNER JOIN (
SELECT
id,
MIN(CASE WHEN (MID(yourtable.city, numbers.n, 1) != '\.') AND
(UPPER(MID(yourtable.city, numbers.n, 1))=BINARY
MID(yourtable.city, numbers.n, 1))
THEN numbers.n END) first_upper
FROM
numbers, yourtable
GROUP BY
id) f
ON yourtable.id = f.id;

请看this fiddle .

您需要一个数字表,其中包含从 1 到字符串最大长度的数字,以模拟 for 循环。在我的子查询中,我为每个城市计算字符串中不包含 . 的最小位置,并且该位置中包含的字符等于大写字符(我们这里需要二进制比较)。如果条件为真,则意味着该字符已经是大写的(或者意味着它是一个特殊字符,如 ; ! ? 但我们需要排除它们)。

然后我从计算的位置提取子字符串,直到第一个空格字符。

关于mysql - 如何在mysql中找到第一个大写字母的索引,西里尔字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com