//*************************************************************************** // // (c) 2000-2001 by Microsoft Corp. All Rights Reserved. // // datepart.h // // a-davcoo 28-Feb-00 Implements the SQL datepart operation. // //*************************************************************************** #ifndef _DATEPART_H_ #define _DATEPART_H_ #include #include #define DATEPART_YEAR 1 // "yy", "year" #define DATEPART_MONTH 3 // "mm", "month" #define DATEPART_DAY 5 // "dd", "day" #define DATEPART_HOUR 8 // "hh", "hour" #define DATEPART_MINUTE 9 // "mi", "minute" #define DATEPART_SECOND 10 // "ss", "second" #define DATEPART_MILLISECOND 11 // "ms", "millisecond" class CDMTFParser; // The CDatePart class implements the SQL "datepart" operation. To use // this class, construct an instance, supplying the date string you wish // to parse. Then use the GetPart() method to extract the specified part. // Contants for the "parts" are presented above. The class makes it's own // copy of the date string supplied during construction. class POLARITY CDatePart { public: CDatePart (); ~CDatePart (); HRESULT SetDate (LPCWSTR lpDate); HRESULT SetDate (LPCSTR lpDate); HRESULT GetPart (int datepart, int *value); protected: CDMTFParser *m_date; }; class POLARITY CDMTFParser { public: enum {YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MICROSECOND, OFFSET}; CDMTFParser (LPCWSTR date); ~CDMTFParser (void); bool IsValid (void); bool IsInterval (void); bool IsUsed (int part); bool IsWildcard (int part); int GetValue (int part); protected: enum {INVALID=0x0, VALID=0x1, NOTSUPPLIED=0x2, NOTUSED=0x4}; enum {NUMPARTS=8}; bool m_valid; bool m_interval; int m_status[NUMPARTS]; int m_part[NUMPARTS]; void ParseDate (LPCWSTR date); void ParseInterval (LPCWSTR date); void ParseAbsolute (LPCWSTR date); int ParsePart (LPCWSTR date, int pos, int length, int *result, int min, int max); }; #endif // _DATEPART_H_