基本字符串:
SELECT (sum([column.one]) / sum([column.two])) AS [sum / sum], [column.three] AS [column.three] FROM [database.table] GROUP BY [column.three] ORDER BY [column.three] ASC
结果字符串:
SELECT (sum([column.one]) / sum([column.two])) AS [sum___sum], [column.three] AS [column.three] FROM [database.table] GROUP BY [column.three] ORDER BY [column.three] ASC
此处[sum / sum]
可能会更改为其他格式,例如[sum * distinct]
或[max + min - distinct]
到目前为止我所拥有的:
用_:
替换围绕它们的所有值[]
(s/replace sql #"\[(.*?)\]" "_")
我在尝试什么: 如果我能得到匹配的值,我可以用下划线替换除点(。)之外的所有特殊字符。
(s/replace sql #"\[(.*?)\]" #(s/replace "$1" #"[\/\*\-\+\(\)\\\s]" "_"))
更清晰:
简而言之,[]
内的任何内容都只能是字母数字,点和下划线的组合。否则用下划线(_)替换该字符。
答案 0 :(得分:1)
[重复我的评论回答]
在这种情况下" $ 1"不是有效的语法。
您正在尝试替换文字字符串" $ 1"中的某些内容,而不是匹配的字符串中的内容。您应该在第二个操作中通过第一个替换操作匹配。只需更换" $ 1"与@Injectable()
export class OtherService {
private _data: any;
private url: string;
constructor(private _http: Http, private locatorService: LocatorService) {
this.url = this.locatorService.getConfig();
}
public loadData(): model[] {
return this._http.get(this.url.serviceUrl)
.map(res => this._data = res.json())
.catch(error =>
Observable.throw(error.json().error || 'Server error'));
}
}
答案 1 :(得分:0)
丑陋的方式是将subs
简单地分割为第一部分和第二部分。然后加你"总和___总和"这些部分之间。
如果要替换的部分总是第一个" AS ["在你的SQL查询字符串中。您可以使用它从字符串中找到正确的index-of
。这样你就不需要regexp了。
如前所述,直接在查询中插入字符串可能会使用sql注入攻击数据库。
更好的方法是在原始查询中使用参数,或者将查询创建为预准备语句。