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
相关产品推荐
相关产品推荐

