【问题标题】:Split Mysql Location entry into 2 columns?将 Mysql Location 条目拆分为 2 列?
【发布时间】:2014-08-29 01:41:48
【问题描述】:

有没有一种简单的方法可以以纬度、经度的格式获取“位置”的表格列并将其拆分为纬度列和经度列?

select 
SUBSTRING_INDEX(`location`, ',', 1) AS latitude,
SUBSTRING_INDEX(SUBSTRING_INDEX(`location`, ',', 2), ',', -1) AS longitude
FROM users_profiles;

此代码将显示我想要的纬度和经度列,但我无法将其插入到我在 users_profiles 表中创建的相应纬度/经度列中。

【问题讨论】:

    标签: mysql sql string split location


    【解决方案1】:

    执行查询不会设置列。要创建列,请执行以下操作:

    alter table users_profiles add column latitude decimal(10, 4);
    alter table users_profiles add column longitude decimal(10, 4);
    

    要分配他们使用update:

    update users_profiles
        set latitude = cast(SUBSTRING_INDEX(`location`, ',', 1) as decimal(10, 4)),
            longitude = cast(SUBSTRING_INDEX(location, ',', -1) as decimal(10, 4));
    

    cast() 操作严格来说是不必要的。我喜欢明确说明字符串和其他类型之间的转换,以防代码中发生异常情况。隐式转换可能很难发现问题。

    【讨论】:

    • 您不需要显式调用CAST。分配将自动执行转换。
    • 他说他创建了专栏,你认为他为什么没有?
    • 没错 Barmar,我在 user_profiles 表中手动创建了纬度和经度列,目的是在复制数据后删除位置列。我可以“选择”解析后的数据,就像我期望的那样,我只是不确定如何格式化 sql 查询以获取这些结果并将它们放入表中。
    • 感谢 Gordon,这正是我想要的。我删除了更改表行,因为我已经手动创建了它们,没什么大不了的。我显然不能在 5 分钟内接受答案,但我会在可以的时候接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2021-12-07
    相关资源
    最近更新 更多