【发布时间】:2020-09-24 13:34:06
【问题描述】:
我在 SQL Server 上有一个 datetime 列:
Column('LAST_SEEN_DTS', DATETIME(), table=<mytable>)
我想将日期增加一天。
这是相关专栏的摘录:
last_seen_dts
0 2017-06-12 15:36:05.263
1 2017-06-12 21:43:16.407
2 2017-06-13 09:02:59.457
3 2017-06-13 15:36:44.183
4 2017-06-14 03:04:07.010
5 2017-06-14 11:51:40.603
6 2017-06-15 02:53:12.373
7 2017-06-15 11:46:16.560
8 2017-06-16 02:44:12.110
9 2017-06-16 03:19:30.307
我尝试过半有效的一种方法是:
q = select([
table.c.LAST_SEEN_DTS,
(func.cast(table.c.LAST_SEEN_DTS, DATE) + timedelta(days=1)).label('date1')
]).distinct().limit(10)
日期加上一天,但年份也增加了 70 年:
date1
0 2087-06-13
1 2087-06-13
2 2087-06-14
3 2087-06-14
4 2087-06-15
5 2087-06-15
6 2087-06-16
7 2087-06-16
8 2087-06-17
9 2087-06-17
我首先尝试像这样使用dateadd 函数:
q = select([
table.c.LAST_SEEN_DTS,
func.dateadd('day', 1, func.cast(table.c.LAST_SEEN_DTS, DATE)).label('date1')
]).distinct().limit(10)
这不起作用,因为不能将day 选项指定为字符串。我试图找到它作为一个常数,但sqlalchemy 和 sqlalchemy.dialects.mssql 似乎都没有。
如何使用 SQLAlchemy 在 SQL Server 上执行此操作?
编辑:
我知道我可以只使用像 text("cast(dateadd(day, 1, LAST_SEEN_DTS) as DATE)") 这样的原始 SQL,但这首先违背了使用 SQLAlchemy 的目的。
【问题讨论】:
-
这里可能有一些帮助 - stackoverflow.com/questions/15572292/…
-
我见过这个问题,但是 SQL Server 上没有 Interval 语法。 dateadd 函数的工作方式不同。我还尝试使用 SQLAlchemy 中的
bindparam做一些杂技,但没有成功。 -
在 sqlserver 中应该是 dateadd(d,1,your_date)
-
没错,问题是如何通过sqlalchemy指定
d选项。 -
在此处检查接受的答案 - pythonpedia.com/en/knowledge-base/15572292/… 这应该会有所帮助。
标签: python sql-server sqlalchemy