我有SQL插入语句。其中一个值是我需要替换的日期。
Insert into table (column_a, column_b) values ('test',to_date('01/DEC/15','DD/MON/RR'));
我有超过1000个Insert SQL语句,如上所述。
我想替换具有格式"to_date('01/DEC/15','DD/MON/RR')"
日期的column_b的值可以在函数内更改。我希望将column_b值替换为所有行的"SYSDATE"
。
我试着跟着什么工作。
^[to_date].*
/to_date([a-zA-Z0-9/,'])+/
/^to_date(.*$/
有人可以帮忙吗?
答案 0 :(得分:1)
插入表格(column_a,column_b)值('测试',to_date(' 01 / DEC / 15',' DD / MON / RR') ); TO_DATE('
如果to_date函数的语法始终正确,则这将满足您的要求:
to_date\([^)]+\)
这个正则表达式意味着什么:
to_date
←找到这个文字字符串\(
←后跟一个左括号。反斜杠是一个"转义字符。"你需要"逃避括号,"因为括号是用于定义组的正则表达式中的特殊字符。[^)]
←后跟一个或多个任何字符,但是一个右括号。括号表示字符集[]
。主要的插入符^
否定了字符集("不是这个集")。\)
←后跟一个右括号。同样,因为这是一个文字括号而不是正则表达式组的右括号,所以必须对该字符进行转义。答案 1 :(得分:1)
答案
to_date\(.+?\)
这匹配......
to_date(
.+?
- non-greedy / lazy匹配任意一个或多个字符)
这是你出错的地方
^
的任何使用 - 这是“字符串的开始”锚点。由于您在寻找从不的字符串出现在开头,因此永远不会匹配。[to_date].*
- 这是一个匹配零个或多个里面字符的字符类,即“t”,“o”,“_”,“d”,“a”或“e” to_date([a-zA-Z0-9/,'])+
- 这里的括号不会被转义,因此它们不是匹配文字(
和)
,而是形成内部字符类的捕获组。由于您错过了字面括号,因此永远不会匹配。to_date(.*$
- 这是一个无效的表达式,因为您错过了捕获组的结束)
答案 2 :(得分:0)
在我看来,在这种情况下,最简单的正则表达式是:
var obj = {item:{title: params.title,description: params.text, link: req.headers['origin']+"/blog/blog-description/"+params.blog_id, guid:req.headers['origin']+"/blog/blog-description/"+params.blog_id}};
var xml2js = require('xml2js');
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
var modXml = xml.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '');
var modXml = xml.replace(/<(?:.|\n)*?>/gm, '');
var new_text = modXml;
fs.readFile('public/feed.xml', function read(err, data) {
if (err) throw err;
var file_content = data.toString();
var c = file_content.indexOf('</description>');
var position = c + 14;
file_content = file_content.substring(position);
var file = fs.openSync('public/feed.xml','r+');
var bufferedText = new Buffer(new_text+file_content);
fs.writeSync(file, bufferedText, 0, bufferedText.length, position);
fs.close(file);
});
此表达式表示文字字符串“to_date”,后面是25个字符。
它会起作用。