package sql import ( "git.sxidc.com/go-tools/utils/reflectutils" "git.sxidc.com/service-supports/fserr" "reflect" "strings" "time" ) const ( timeWriteFormat = time.DateTime + ".000000 +08:00" ) var keyWordsMap = map[string]any{} 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 case time.Time: return "'" + v.Format(timeWriteFormat) + "'", nil default: retStr := new(string) err := reflectutils.AssignStringValue(v, reflect.ValueOf(retStr).Elem()) 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 }