【问题标题】:Adding one day to date column - dateadd or timedelta添加一天到日期列 - dateadd 或 timedelta
【发布时间】: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 选项指定为字符串。我试图找到它作为一个常数,但sqlalchemysqlalchemy.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


【解决方案1】:

你可以试试下面这个脚本-

q = select([
table.c.LAST_SEEN_DTS,
func.dateadd('D', 1, func.cast(table.c.LAST_SEEN_DTS, DATE)).label('date1')
]).distinct().limit(10)

【讨论】:

  • 'D' 必须包含在 sa.text 中,这样才有效
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2010-09-15
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2023-03-09
  • 2021-04-26
相关资源
最近更新 更多