1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _CONNECTIVITY_FILE_FDATEFUNCTIONS_HXX_ 25 #define _CONNECTIVITY_FILE_FDATEFUNCTIONS_HXX_ 26 27 #include "file/fcode.hxx" 28 #include "file/filedllapi.hxx" 29 30 namespace connectivity 31 { 32 class OSQLParseNode; 33 namespace file 34 { 35 /** DAYOFWEEK(date) 36 Returns the weekday index for date (1 = Sunday, 2 = Monday, ... 7 = Saturday). These index values correspond to the ODBC standard. 37 38 > SELECT DAYOFWEEK('1998-02-03'); 39 -> 3 40 */ 41 class OOp_DayOfWeek : public OUnaryOperator 42 { 43 protected: 44 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 45 }; 46 47 /** DAYOFMONTH(date) 48 Returns the day of the month for date, in the range 1 to 31: 49 50 > SELECT DAYOFMONTH('1998-02-03'); 51 -> 3 52 */ 53 class OOp_DayOfMonth : public OUnaryOperator 54 { 55 protected: 56 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 57 }; 58 59 /** DAYOFYEAR(date) 60 Returns the day of the year for date, in the range 1 to 366: 61 62 > SELECT DAYOFYEAR('1998-02-03'); 63 -> 34 64 65 */ 66 class OOp_DayOfYear : public OUnaryOperator 67 { 68 protected: 69 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 70 }; 71 72 /** MONTH(date) 73 Returns the month for date, in the range 1 to 12: 74 75 > SELECT MONTH('1998-02-03'); 76 -> 2 77 */ 78 class OOp_Month : public OUnaryOperator 79 { 80 protected: 81 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 82 }; 83 84 /** DAYNAME(date) 85 Returns the name of the weekday for date: 86 87 > SELECT DAYNAME('1998-02-05'); 88 -> 'Thursday' 89 90 */ 91 class OOp_DayName : public OUnaryOperator 92 { 93 protected: 94 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 95 }; 96 97 /** MONTHNAME(date) 98 Returns the name of the month for date: 99 100 > SELECT MONTHNAME('1998-02-05'); 101 -> 'February' 102 103 */ 104 class OOp_MonthName : public OUnaryOperator 105 { 106 protected: 107 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 108 }; 109 110 /** QUARTER(date) 111 Returns the quarter of the year for date, in the range 1 to 4: 112 113 > SELECT QUARTER('98-04-01'); 114 -> 2 115 116 */ 117 class OOp_Quarter : public OUnaryOperator 118 { 119 protected: 120 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 121 }; 122 123 /** WEEK(date) 124 WEEK(date,first) 125 With a single argument, returns the week for date, in the range 0 to 53 (yes, there may be the beginnings of a week 53), for locations where Sunday is the first day of the week. The two-argument form of WEEK() allows you to specify whether the week starts on Sunday or Monday and whether the return value should be in the range 0-53 or 1-52. Here is a table for how the second argument works: 126 Value Meaning 127 0 Week starts on Sunday and return value is in range 0-53 128 1 Week starts on Monday and return value is in range 0-53 129 2 Week starts on Sunday and return value is in range 1-53 130 3 Week starts on Monday and return value is in range 1-53 (ISO 8601) 131 132 > SELECT WEEK('1998-02-20'); 133 -> 7 134 > SELECT WEEK('1998-02-20',0); 135 -> 7 136 > SELECT WEEK('1998-02-20',1); 137 -> 8 138 > SELECT WEEK('1998-12-31',1); 139 -> 53 140 141 */ 142 class OOp_Week : public ONthOperator 143 { 144 protected: 145 virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const; 146 }; 147 148 /** YEAR(date) 149 Returns the year for date, in the range 1000 to 9999: 150 151 > SELECT YEAR('98-02-03'); 152 -> 1998 153 */ 154 class OOp_Year : public OUnaryOperator 155 { 156 protected: 157 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 158 }; 159 160 /** HOUR(time) 161 Returns the hour for time, in the range 0 to 23: 162 163 > SELECT HOUR('10:05:03'); 164 -> 10 165 */ 166 class OOp_Hour : public OUnaryOperator 167 { 168 protected: 169 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 170 }; 171 172 /** MINUTE(time) 173 Returns the minute for time, in the range 0 to 59: 174 175 > SELECT MINUTE('98-02-03 10:05:03'); 176 -> 5 177 178 */ 179 class OOp_Minute : public OUnaryOperator 180 { 181 protected: 182 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 183 }; 184 185 /** SECOND(time) 186 Returns the second for time, in the range 0 to 59: 187 188 > SELECT SECOND('10:05:03'); 189 -> 3 190 */ 191 class OOp_Second : public OUnaryOperator 192 { 193 protected: 194 virtual ORowSetValue operate(const ORowSetValue& lhs) const; 195 }; 196 197 /** CURDATE() 198 CURRENT_DATE 199 Returns today's date as a value in 'YYYY-MM-DD' or YYYYMMDD format, depending on whether the function is used in a string or numeric context: 200 201 > SELECT CURDATE(); 202 -> '1997-12-15' 203 */ 204 class OOp_CurDate : public ONthOperator 205 { 206 protected: 207 virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const; 208 }; 209 210 /** CURTIME() 211 CURRENT_TIME 212 Returns the current time as a value in 'HH:MM:SS' or HHMMSS format, depending on whether the function is used in a string or numeric context: 213 214 > SELECT CURTIME(); 215 -> '23:50:26' 216 */ 217 class OOp_CurTime : public ONthOperator 218 { 219 protected: 220 virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const; 221 }; 222 223 /** NOW() 224 Returns the current date and time as a value in 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS format, depending on whether the function is used in a string or numeric context: 225 226 > SELECT NOW(); 227 -> '1997-12-15 23:50:26' 228 */ 229 class OOp_Now : public ONthOperator 230 { 231 protected: 232 virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const; 233 }; 234 } 235 } 236 237 #endif // _CONNECTIVITY_FILE_FCODE_HXX_ 238 239