You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL处理格式不一致的英制距离字符串并转换为浪?

英制距离转浪单位的SQL解决方案

转换规则先明确

  • 1英里(m)= 8浪(f)
  • 1浪 = 220码(yd/y),码转浪公式:码数 / 220

修正后的SQL语句

针对格式不固定的输入,我们可以分别提取每种单位对应的数值,不管它们在字符串中的位置:

SELECT
    -- 提取英里数转浪:1m=8f
    NVL(TO_NUMBER(REGEXP_SUBSTR(column_name, '(\d+)m', 1, 1, NULL, 1)), 0) * 8
    -- 提取浪数直接累加
    + NVL(TO_NUMBER(REGEXP_SUBSTR(column_name, '(\d+)f', 1, 1, NULL, 1)), 0)
    -- 提取码数转浪:码数/220
    + NVL(TO_NUMBER(REGEXP_SUBSTR(column_name, '(\d+)(yds|y)', 1, 1, NULL, 1)) / 220, 0)
AS FURLONGS
FROM table_name;

关键正则说明(给新手的解释)

  1. '(\d+)m':匹配数字+字母m的片段,(\d+)是捕获组(提取的数字部分),最后一个参数1表示取第一个捕获组的内容,不管m在字符串的开头、中间还是结尾都能匹配。
  2. '(\d+)f':同理,提取浪对应的数字。
  3. '(\d+)(yds|y)':匹配数字+yds或y的片段,不管码的单位是yds还是y都能捕获到前面的数字。
  4. NVL(..., 0):如果某单位不存在(比如没有m、f或码),就用0代替,避免空值报错。

测试验证

用你给出的示例数据测试:

  • 1m → 1*8 +0 +0 =8浪
  • 6f → 0 +6 +0=6浪
  • 1m 2f 0y → 8+2+0=10浪
  • 1m 30yds → 8 +0 +30/220≈8.136浪
  • 2m 0f 32y → 16+0+32/220≈16.145浪
  • 2m 2f → 16+2+0=18浪

内容的提问来源于stack exchange,提问作者UKJonA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:13:12