0
我希望把過濾器上的Informix查詢記錄:無法篩選基於日期過濾器中的Informix
WHERE agentstatedetail.eventdatetime < '1753-01-01 00:00:00' - INTERVAL(3) DAY TO DAY
,但它不能... 請先告知哪裏出了問題。
我希望把過濾器上的Informix查詢記錄:無法篩選基於日期過濾器中的Informix
WHERE agentstatedetail.eventdatetime < '1753-01-01 00:00:00' - INTERVAL(3) DAY TO DAY
,但它不能... 請先告知哪裏出了問題。
如所指出的在一個評論,該解決方案是,以確保字符串被解釋爲一個DATETIME
值。最簡單的方法做到這一點是使用DATETIME
文字符號:
DATETIME(1753-01-01 00:00:00) YEAR TO SECOND
爲了證明:
CREATE TABLE agentstatedetail
(
eventdatetime DATETIME YEAR TO SECOND NOT NULL PRIMARY KEY,
eventname VARCHAR(64) NOT NULL
);
INSERT INTO agentstatedetail VALUES('1752-12-25 12:00:00', 'Christmas Day, Noon, 1752');
INSERT INTO agentstatedetail VALUES('1752-12-31 12:00:00', 'New Year''s Eve, Noon, 1752');
INSERT INTO agentstatedetail VALUES('1753-01-01 12:00:00', 'New Year''s Day, Noon, 1753');
SELECT * FROM agentstatedetail WHERE agentstatedetail.eventdatetime < '1753-01-01 00:00:00' - INTERVAL(3) DAY TO DAY;
這是你原來的WHERE子句嵌入到一個最小的SELECT語句。它產生的錯誤:
SQL -1261: Too many digits in the first field of datetime or interval.
(注:這本來是有幫助的,包括在這個問題的錯誤消息。)
下面是查詢的替代版本,在地方DATETIME
文字:
SELECT * FROM agentstatedetail
WHERE agentstatedetail.eventdatetime < DATETIME(1753-01-01 00:00:00) YEAR TO SECOND -
INTERVAL(3) DAY TO DAY
;
輸出:
1752-12-25 12:00:00|Christmas DAY, Noon, 1752
我觀察到計算的值是一個常數;你可以重寫代碼爲:
SELECT * FROM agentstatedetail
WHERE agentstatedetail.eventdatetime < DATETIME(1752-12-29 00:00:00) YEAR TO SECOND
我懷疑這個值是作爲參數傳遞的。
或者,你可以投的字符串DATETIME值,你會得到相同的結果:
SELECT * FROM agentstatedetail
WHERE agentstatedetail.eventdatetime < CAST('1753-01-01 00:00:00' AS DATETIME YEAR TO SECOND) -
INTERVAL(3) DAY TO DAY
;
或:
SELECT * FROM agentstatedetail
WHERE agentstatedetail.eventdatetime < '1753-01-01 00:00:00'::DATETIME YEAR TO SECOND -
INTERVAL(3) DAY TO DAY
我會用什麼了記號後試驗您正在使用,但使用'DATETIME(1753年1月1日00:00:00)YEAR TO秒'應該得到你的節目回來的路上。 –