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

Go中如何区分COLUMN_DEFAULT里的字符串与非字符串(函数、数字等)

解决方案

Go标准库没有原生方法直接区分COLUMN_DEFAULT的类型(字符串、函数调用、数字),你需要根据数据库返回的格式特征自行判断,以下是通用的处理思路和示例代码:

  • 区分字符串类型:多数数据库中,字符串类型的默认值会被单引号包裹(比如'user_default'),可以通过检查字符串首尾是否为单引号来判断,匹配后可去掉引号获取实际字符串值。
  • 区分函数调用:函数类型的默认值通常包含括号,格式类似CURRENT_TIMESTAMP()、NOW(),可以用正则表达式匹配这类格式(比如^[A-Za-z_]+\(.*\)$),注意不同数据库的函数命名和格式可能有差异,需要针对性调整正则。
  • 区分数字类型:用strconv.ParseFloat或strconv.ParseInt尝试解析值,解析成功则判定为数字类型。

示例代码:

import (
    "regexp"
    "strconv"
)

// ClassifyDefaultValue 判断COLUMN_DEFAULT的类型
func ClassifyDefaultValue(val string) string {
    // 检查是否为带单引号的字符串
    if len(val) >= 2 && val[0] == '\'' && val[len(val)-1] == '\'' {
        return "string"
    }
    // 检查是否为函数调用(适配多数数据库的函数格式)
    funcPattern := regexp.MustCompile(`^[A-Za-z_]+\(.*\)$`)
    if funcPattern.MatchString(val) {
        return "function"
    }
    // 检查是否为数字
    if _, err := strconv.ParseFloat(val, 64); err == nil {
        return "number"
    }
    // 处理其他特殊情况(如数据库特定常量)
    return "unknown"
}

注意:不同数据库的information_schema.COLUMNS返回的COLUMN_DEFAULT格式可能存在差异,比如PostgreSQL中部分函数的写法、SQL Server的常量格式等,你需要根据目标数据库的特性调整判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:35:05