【发布时间】:2022-01-16 23:41:18
【问题描述】:
我正在尝试让脚本自动将查询开始时间设置为昨天早上 6 点(一旦我找出开始时间错误,就会将结束时间设置为今天早上 6 点)但我收到语法错误(102, b“'06'附近的语法不正确。DB-Lib 错误消息 20018,严重性 15:\n一般 SQL Server 错误:检查来自 SQL Server 的消息\n”)。
如果我取出 """+StartTime+""" 并更改为 '20211212 07:00:00.000' 那么它可以工作,但我需要一种方法让脚本跟踪当前日期而不是返回每天都在变化。
from datetime import timedelta
import numpy as np
from pandas import DataFrame
import pandas as pd
import pymssql
from datetime import date, timedelta
today = date.today()
yesterday = today - timedelta(days = 1)
BEGINDATE=yesterday
ENDDATE=today
BEGINDATE=BEGINDATE.strftime("%Y%m%d")
ENDDATE=ENDDATE.strftime("%Y%m%d")
StartTime = BEGINDATE +' 06:00:00:000'
print(StartTime)
Query= """SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = """+StartTime+"""
SET @EndDate = '20211213 07:00:00.000'
SET NOCOUNT OFF
SELECT temp.TagName ,DateTime ,Value ,vValue ,MinRaw = ISNULL(Cast(AnalogTag.MinRaw as VarChar(20)),'N/A') ,MaxRaw = ISNULL(Cast(AnalogTag.MaxRaw as VarChar(20)),'N/A') ,Unit = ISNULL(Cast(EngineeringUnit.Unit as VarChar(20)),'N/A') ,StartDateTime From (
SELECT *
FROM History
WHERE History.TagName IN ('S03_FT03_04_TOT01')
AND wwRetrievalMode = 'Cyclic'
AND wwCycleCount = 1440
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate) temp
LEFT JOIN AnalogTag ON AnalogTag.TagName =temp.TagName
LEFT JOIN EngineeringUnit ON AnalogTag.EUKey = EngineeringUnit.EUKey
WHERE temp.StartDateTime >= @StartDate"""
cur.execute(Query)
print(Query)
【问题讨论】:
-
您的
StartTime周围缺少引号。 -
@KlausD。在查询内部?它不应该留在引号之外,因为它是一个变量吗?
-
在执行之前打印出
Query并比较@StartDate和@EndDate行。 -
啊,明白了,它现在可以工作了。谢谢