package sql import ( "git.sxidc.com/go-tools/utils/reflectutils" "git.sxidc.com/service-supports/fserr" "reflect" "strings" ) func toSqlValue(value any) (string, error) { if value == nil { return "", nil } valueValue := reflect.ValueOf(value) if valueValue.Kind() == reflect.Slice { return "", fserr.New("请使用toSqlValues处理slice类型") } switch v := reflectutils.PointerValueElem(valueValue).Interface().(type) { case string: return "'" + v + "'", nil default: var retStr string err := reflectutils.AssignStringValue(v, reflect.ValueOf(retStr)) if err != nil { return "", err } return retStr, nil } } func toSqlValues(values any) (string, error) { if values == nil { return "()", nil } sliceValue := reflect.ValueOf(values) if sliceValue.IsZero() { return "()", nil } if sliceValue.Kind() != reflect.Slice { return "", fserr.New("传递的不是slice") } parsedValues := make([]string, 0) for i := 0; i < sliceValue.Len(); i++ { value := sliceValue.Index(i).Interface() parsedValue, err := toSqlValue(value) if err != nil { return "", err } parsedValues = append(parsedValues, parsedValue) } if len(parsedValues) == 0 { return "()", nil } return "(" + strings.Join(parsedValues, ",") + ")", nil }