我有一个日期如下的 varchar 列:
1. 01-JUN-13
2. 01/23/12
3. 01.13.13
4. 01-13-13
5. 13-01-13
是否可以将它们全部转换为单一格式?我已经尝试了很多转换/转换,通常会导致从字符串转换日期和/或时间时转换失败。
或者什么都没有发生。
我有一个日期如下的 varchar 列:
1. 01-JUN-13
2. 01/23/12
3. 01.13.13
4. 01-13-13
5. 13-01-13
是否可以将它们全部转换为单一格式?我已经尝试了很多转换/转换,通常会导致从字符串转换日期和/或时间时转换失败。
或者什么都没有发生。
我认为没有办法将所有 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
我意识到我还年轻天真地认为 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()