用于在某些列中转换日期时间格式的SQL语句

时间:2010-12-21 03:49:06

标签: sql sqlite

我有一个SQLite数据库,其中一些列是日期时间字符串,格式为1/2/2000 3:45:56 am。

是否有可以将这些值转换为类似ISO-8601格式的字符串的SQL语句(2000-01-02 03:45:56)?

(一种可能的非SQL方法是将数据库导出为CSV文件,并使用Python及其csv和datetime模块来解析列。)

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

转换另一种方式很简单:您可以使用strftime。但是这要求日期以ISO 8601格式(或Julian或Unix日期)开头。

可以在SQL中使用字符串操作来完成它,但它会非常复杂。最简单的方法是创建一个用户定义的函数。

def fix_timestamp(timestamp):
    return datetime.datetime.strptime(timestamp, '%m/%d/%Y %I:%M:%S %p') \
           .strftime('%Y-%m-%d %H:%M:%S')

db = sqlite3.connect('...')
db.create_function('FixTimestamp', 1, fix_timestamp)

然后你可以UPDATE TheTable SET TheColumn = FixTimestamp(TheColumn)