SQL SERVER使用多种格式转换日期

时间:2013-09-19 15:43:04

标签: sql sql-server sql-server-2005

我有一个varchar列,其日期如下:

1. 01-JUN-13
2. 01/23/12
3. 01.13.13
4. 01-13-13
5. 13-01-13

是否可以将所有这些转换为单一格式?我经常尝试过很多转换/演员 从字符串转换日期和/或时间时转换失败。

或什么也没发生。

2 个答案:

答案 0 :(得分:0)

我认为没有办法将所有varchar值转换为日期,因为这是一个含糊不清的请求。

鉴于此值:02/03/2011 4:15:22 PM +0500

我如何知道3月2日或2月3日?

修改
假设你忽略了这种情况,你需要使用相关的转换方法来转换每种格式,你可以找到很多关于这个的帖子,如:

http://www.codeproject.com/Articles/576178/cast-convert-format-try-parse-date-and-time-sql

http://www.sql-server-helper.com/sql-server-2008/sql-server-2008-date-format.aspx

答案 1 :(得分:0)

我意识到我还很年轻并且天真地认为SQL Server可以捕获日期的所有功能并逐一评估。

我确实找到了一个有用的python软件包。这是我使用的代码,虽然不是很完美,但它会一次评估一个以找出日期格式

import pypyodbc
from dateutil import parser



def load_table(connection,type):
    curPull = connection.cursor()

    # Pull rows
    if type == "diff":
        updateStatement = ("UPDATE tmp_date SET convertedDateTime = ? WHERE id = ?")
        curPull.execute("select id,dateNeeded,convertedDateTime from tmp_date where convertedDateTime IS NULL")
        result_set = curPull.fetchall()
        for row in result_set:
            vrowid = row[0]
            vdateNeeded = row[1]
            vconvertedDateTime = row[2]

            vparsedDate = parser.parse(vdateNeeded)
            curPull.execute(updateStatement, (vparsedDate,vrowid))
    connection.commit() 

def main():
    serverIn = ""
    databaseIn = ""
    username = ""
    password = ""
    conString = "Driver={SQL Server};Server=%s;Database=%s;UID=%s;PWD=%s;" % (serverIn, databaseIn, username, password)
    connection = pypyodbc.connect(conString)


    load_table(connection,"diff")
    connection.close()


main()