You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLGlot解析含UTC格式时间戳的SQL时遇解析错误求助

解决SQLGlot解析UTC格式时间戳SQL的报错问题

报错原因

SQL语法中,UTC格式的时间戳属于字符串字面量,必须用单引号包裹。你的查询里时间戳没加引号,SQLGlot会把2024-03-20T23:45:43.216000+00:00当成连续的减法运算(2024 - 03 - 20),后续的T23就成了无法识别的无效token,导致解析失败。

解决方案

方法1:手动给时间戳添加单引号

直接修改SQL语句,把UTC时间戳用单引号括起来,代码示例:

from sqlglot import parse_one, exp

# 修正后的SQL:时间戳加单引号
q = 'SELECT Info,Type,Username FROM MyTbl WHERE EventDate >= \'2024-03-20T23:45:43.216000+00:00\' AND EventDate <= \'2024-03-21T00:50:00.637052+00:00\' ORDER BY EventDate DESC LIMIT 10000'
column_list = []
table_list = []

# 提取列名
for column in parse_one(q).find_all(exp.Column):
    col = column.alias_or_name
    column_list.append(col)

# 提取表名
for table in parse_one(q).find_all(exp.Table):
    tbl = table.name
    table_list.append(tbl)

print("列名:", column_list)
print("表名:", table_list)

执行后会正常输出:

列名: ['Info', 'Type', 'Username', 'EventDate', 'EventDate', 'EventDate']
表名: ['MyTbl']

方法2:自动给UTC时间戳加引号(适合批量处理)

如果无法手动修改SQL,可以用正则表达式匹配UTC格式的时间戳,自动替换为带单引号的版本:

import re
from sqlglot import parse_one, exp

def fix_utc_timestamp(sql):
    # 匹配UTC时间格式:YYYY-MM-DDTHH:MM:SS.ssssss+HH:MM
    pattern = r'(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}\+\d{2}:\d{2})'
    # 替换为带单引号的形式
    return re.sub(pattern, r"'\1'", sql)

# 原始SQL
original_q = 'SELECT Info,Type,Username FROM MyTbl WHERE EventDate >= 2024-03-20T23:45:43.216000+00:00 AND EventDate <= 2024-03-21T00:50:00.637052+00:00 ORDER BY EventDate DESC LIMIT 10000'
# 修复后的SQL
fixed_q = fix_utc_timestamp(original_q)

# 提取列名和表名
column_list = [col.alias_or_name for col in parse_one(fixed_q).find_all(exp.Column)]
table_list = [tbl.name for tbl in parse_one(fixed_q).find_all(exp.Table)]

print("列名:", column_list)
print("表名:", table_list)

注意事项

  • 正则表达式可以根据你实际的时间戳格式调整(比如有的时间戳可能没有毫秒部分,或者时区格式不同)
  • 不同SQL方言对时间字面量的处理可能略有差异,但加单引号是通用的标准写法

内容的提问来源于stack exchange,提问作者user1717931

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:43:16