@@ -147,6 +147,41 @@ func (field String) SubstringIndex(delim string, count int) String {
147147 }}}
148148}
149149
150+ // Substring https://dev.mysql.com/doc/refman/8.4/en/string-functions.html#function_substring
151+ func (field String ) Substring (params ... int ) String {
152+ if len (params ) == 0 {
153+ return field
154+ }
155+ if len (params ) == 1 {
156+ return String {expr {e : clause.Expr {
157+ SQL : fmt .Sprintf ("SUBSTRING(?,%d)" , params [0 ]),
158+ Vars : []interface {}{field .RawExpr ()},
159+ }}}
160+ }
161+ return String {expr {e : clause.Expr {
162+ SQL : fmt .Sprintf ("SUBSTRING(?,%d,%d)" , params [0 ], params [1 ]),
163+ Vars : []interface {}{field .RawExpr ()},
164+ }}}
165+ }
166+
167+ // Substr SUBSTR is a synonym for SUBSTRING
168+ // https://dev.mysql.com/doc/refman/8.4/en/string-functions.html#function_substring
169+ func (field String ) Substr (params ... int ) String {
170+ if len (params ) == 0 {
171+ return field
172+ }
173+ if len (params ) == 1 {
174+ return String {expr {e : clause.Expr {
175+ SQL : fmt .Sprintf ("SUBSTR(?,%d)" , params [0 ]),
176+ Vars : []interface {}{field .RawExpr ()},
177+ }}}
178+ }
179+ return String {expr {e : clause.Expr {
180+ SQL : fmt .Sprintf ("SUBSTR(?,%d,%d)" , params [0 ], params [1 ]),
181+ Vars : []interface {}{field .RawExpr ()},
182+ }}}
183+ }
184+
150185func (field String ) toSlice (values []string ) []interface {} {
151186 slice := make ([]interface {}, len (values ))
152187 for i , v := range values {
0 commit comments