@@ -132,6 +132,10 @@ SQLVARBINARY = SYBVARBINARY
132132SQLVARCHAR = SYBVARCHAR
133133SQLUUID = 36
134134
135+ SQLDATE = 40
136+ SQLTIME = 41
137+ SQLDATETIME2 = 42
138+
135139# ######################
136140# # Exception classes ##
137141# ######################
@@ -800,13 +804,25 @@ cdef class MSSQLConnection:
800804 ctx.prec = precision if precision > 0 else 1
801805 return decimal.Decimal(_remove_locale(buf, converted_length).decode(self ._charset))
802806
803- elif dbtype == SQLDATETIM4:
807+ elif dbtype in ( SQLDATETIM4, SQLDATETIME2) :
804808 dbconvert(self .dbproc, dbtype, data, - 1 , SQLDATETIME,
805809 < BYTE * > & dt, - 1 )
806810 dbdatecrack(self .dbproc, & di, < DBDATETIME * >< BYTE * > & dt)
807811 return datetime.datetime(di.year, di.month, di.day,
808812 di.hour, di.minute, di.second, di.millisecond * 1000 )
809813
814+ elif dbtype == SQLDATE:
815+ dbconvert(self .dbproc, dbtype, data, - 1 , SQLDATETIME,
816+ < BYTE * > & dt, - 1 )
817+ dbdatecrack(self .dbproc, & di, < DBDATETIME * >< BYTE * > & dt)
818+ return datetime.date(di.year, di.month, di.day)
819+
820+ elif dbtype == SQLTIME:
821+ dbconvert(self .dbproc, dbtype, data, - 1 , SQLDATETIME,
822+ < BYTE * > & dt, - 1 )
823+ dbdatecrack(self .dbproc, & di, < DBDATETIME * >< BYTE * > & dt)
824+ return datetime.time(di.hour, di.minute, di.second, di.millisecond * 1000 )
825+
810826 elif dbtype == SQLDATETIME:
811827 dbdatecrack(self .dbproc, & di, < DBDATETIME * > data)
812828 return datetime.datetime(di.year, di.month, di.day,
0 commit comments