2015-06-16 21 views
0

如何將MSSQL時間數據類型轉換爲python時間或字符串? MSSQL服務器中的列被定義爲時間(7)。MS SQL時間數據類型到python時間

的Windows7上,我使用Python3/adodbapi和列返回字節:

sql = 'SELECT top 1 * FROM table1' 
with adodbapi.connect('srv') as cn: 
    with cn.cursor() as cur: 
     cur.execute(sql) 
     for row in cur: 
      print(type(row['col1'])) 
      print(row['col1']) 
      for c in row['col1']: print(c) 

>>> <class 'bytes'> 
>>> b'\t\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00' 
>>> 9 
    0 
    30 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 

如何轉換蟒蛇字節回時間或字符串?

在linux上,我使用Python3/pymssql,並且列返回字符串,我可以解析時間。

>>> <class 'str'> 
>>> 09:30:00.0000000 
+0

也許這個答案可以幫助你:http://stackoverflow.com/questions/20024490/how-to-split-a-byte-string-into-separate-bytes-in-python#answer-20024532 – IanAuld

+0

我結束使用convert(smalldatetime,col1)作爲time1 – fivelements

+0

如果您已經設法自己解決您的問題,請詳細說明您作爲答案做了什麼,以便將來的讀者可以從中受益。你也可以接受你自己的答案。 – IanAuld

回答

0

到位的解決方法我有是調整SQL語句,以便TSQL轉換時間()明確地列:

sql = 'SELECT *, convert(smalldatetime, col1) as ncol1 FROM table1' 

在Windows(adodbapi)和Linux(pymssql)現在我正在爲'ncol1'獲得一致的python datetime對象。

更新: 它看起來像一個數據庫驅動程序問題。在Windows上切換到pymssql後,我發現數據庫中的time(7)列也以字符串形式返回,與Linux上的一樣。 (因此Linux/windows和pymssql都會返回時間列的字符串,這是一致的。)出於某種原因,adodbapi返回了bytearray。