#include"base_function.h" using namespace std; string to_date(string t){ if(t.find('-') != string::npos) return t; string s = "-" + t.substr(t.length() - 4, 2) + "-" + t.substr(t.length() - 2); t = t.substr(0, t.length() - 4); while(t.length() < 4) t = "0" + t; while(t.length() > 4 && t[0] == '0') t = t.substr(1); return t + s; } string to_time(string t){ if(t.find(':') != string::npos) return t; string s = ":" + t.substr(t.length() - 4, 2) + ":" + t.substr(t.length() - 2); t = t.substr(0, t.length() - 4); while(t.length() < 2) t = "0" + t; if(t[0] == '-' && t.length() == 2){ t[0] = '0'; t = '-' + t; } return t + s; } string adddate(string s1, string s2){ string t = to_date(s1); int m = stoi(t.substr(5,2)), y = stoi(t.substr(0, t.find('-'))), d = stoi(t.substr(t.length() - 2)), d2 = stoi(s2); while(d2--){ d++; if(m!=2 && d>monthd[m]) m++, d = 1; else if(m==2){ if(y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)){ if(d > 29) m++, d = 1; } else if(d > 28) m++, d = 1; } if(m == 13) m = 1, y++; if(y == 10000) return "NULL"; } string y1 = to_string(y), m1 = to_string(m), d1 = to_string(d); while(y1.length() < 4) y1 = "0" + y1; if(m1.length() == 1) m1 = "0" + m1; if(d1.length() == 1) d1 = "0" + d1; return y1 + "-" + m1 + "-" + d1; } string addtime(string s1, string s2){ string t = to_time(s1); int m = stoi(t.substr(t.length() - 5)), s = stoi(t.substr(t.length() - 2)), h = stoi(t.substr(0, t.find(':'))), s3 = stoi(s2); bool p = true; if(t[0] == '-') p = false; while(s3--){ if(p){ s++; if(s == 60) m++, s = 0; if(m == 60) h++, m = 0; }else{ s--; if(s == 0 && m == 0 && h == 0) p = true; if(s == -1) s = 59, m--; if(m == -1) m = 59, h++; } if(h == 1000) return "NULL"; } string th = to_string(h), tm = to_string(m), ts = to_string(s); if(h == 0 && !p) th = "-00"; if(ts.length() == 1) ts = "0" + ts; if(tm.length() == 1) tm = "0" + tm; if(th.length() == 1) th = "0" + th; else if(th[0] == '-' && th.length() == 2){ th[0]='0'; th = "-" + th;} return th + ":" + tm + ":" + ts; } bool str_com(const string& a,const string& b) { //忽略大小写的字符串比较函数 if (a.length()!=b.length()) return false; else { bool c; for (int i=0; i cut(const string& t) { string s=t; while(1){ char t=s.back(); if(t!=';'&&t!=' '&&t!='\r'&&t!='\n'&&t!='\t') break; else{ s.pop_back(); } } int l = s.length(); string u = ""; vector temp; //切割string s, 并过滤空格 for(int i = 0; i < l; i++) { if(i == l - 1) { if(s[i] != ' ') u.push_back(s[i]); if(u != "") temp.push_back(u); break; } if(s[i] != ' '&&s[i]!='\t') u.push_back(s[i]); else if(u != "") { temp.push_back(u); u = ""; } } return temp; } bool compare(string data1,string data2,string type1,string type2,string opt){ if(Tolower(opt)=="like"){ bool front=false,back=false;//记录最前面和最后面是否有% if(data2[0]=='%') front=true; if(data2.back()=='%') back=true; vectorneed;//需要含有的字符串 string u=""; for(int i=0;i") return data1>data2; else if(opt=="=") return data1==data2; else if(opt==">=") return data1>=data2; else if(opt=="<=") return data1<=data2; else if(opt=="!=") return data1!=data2; else{ cout<<"wrong!";return false; } } else if(type1=="date" || type2=="date"){ string d1 = to_date(data1), d2 = to_date(data2); if(opt=="<") return d1") return d1>d2; else if(opt=="=") return d1==d2; else if(opt==">=") return d1>=d2; else if(opt=="<=") return d1<=d2; else if(opt=="!=") return d1!=d2; else{ cout<<"wrong!";return false; } } else if(type1=="time" || type2=="time"){ string d1 = to_time(data1), d2 = to_time(data2); if(opt=="<") return d1") return d1>d2; else if(opt=="=") return d1==d2; else if(opt==">=") return d1>=d2; else if(opt=="<=") return d1<=d2; else if(opt=="!=") return d1!=d2; else{ cout<<"wrong!";return false; } } else{ if(type1=="int(11)") { if(type2=="int(11)") { int d1=stoi(data1),d2=stoi(data2); if(opt=="<") return d1") return d1>d2; else if(opt=="=") return d1==d2; else if(opt==">=") return d1>=d2; else if(opt=="<=") return d1<=d2; else if(opt=="!=") return d1!=d2; else{ cout<<"wrong!";return false; } } else if(type2=="double"){ int d1=stoi(data1);double d2=stof(data2); if(opt=="<") return d1") return d1>d2; else if(opt=="=") return d1==d2; else if(opt==">=") return d1>=d2; else if(opt=="<=") return d1<=d2; else if(opt=="!=") return d1!=d2; else{ cout<<"wrong!";return false; } } } else if(type1=="double"){ if(type2=="double"){ double d1=stof(data1),d2=stof(data2); if(opt=="<") return d1") return d1>d2; else if(opt=="=") return d1==d2; else if(opt==">=") return d1>=d2; else if(opt=="<=") return d1<=d2; else if(opt=="!=") return d1!=d2; else{ cout<<"wrong!";return false; } } else if(type2=="int(11)"){ double d1=stof(data1);int d2=stoi(data2); if(opt=="<") return d1") return d1>d2; else if(opt=="=") return d1==d2; else if(opt==">=") return d1>=d2; else if(opt=="<=") return d1<=d2; else if(opt=="!=") return d1!=d2; else{ cout<<"wrong!";return false; } } } double d1=stof(data1),d2=stof(data2); if(opt=="<") return d1") return d1>d2; else if(opt=="=") return d1==d2; else if(opt==">=") return d1>=d2; else if(opt=="<=") return d1<=d2; else if(opt=="!=") return d1!=d2; else{ cout<<"wrong!";return false; } } } } void clear_space(string& data){ while(data.front()==' '){ data.erase(data.begin()); } while(data.back()==' '){ data.erase(data.begin()+data.size()-1); } } void clear_qua(string& data){ while(data.front()=='"' || data.front()=='\''){ data.erase(data.begin()); } while(data.back()=='"' || data.back() == '\''){ data.erase(data.begin()+data.size()-1); } } int find_pos(const vector& t,string need,bool strict,bool care_big_small){ for(int i=0;i get_show_columnname(vector& t){ vectorresult; for(int i=1;i split_string(string s){ vectorresult; string u=""; bool now_data=true; bool inqua=false; for(int i=0;i'||c=='='||c=='!'||c=='+'||c=='-'||c=='*'||c=='/'||c=='%') return true; return false; } bool iscmp(string x){ if(x==">"||x=="<"||x=="="||x=="!="||x=="<="||x==">="||Tolower(x)=="like") return true; return false; } bool iscountopt(string x){ if(x=="+"||x=="-"|x=="*"||x=="/"||x=="%") return true; return false; } string putvector_tostring(vector& t,int start,int end){ string result=t[start]; for(int i=start+1;i<=end;++i){ result+=' ';result+=t[i]; } return result; } vectorclear_tablename(vector& u){ vectorresult; for(int i=0;i& u){ if(find_pos(u,"null")!=-1) return true; return false; } void print_vector(vector& u){ for(int i=0;i