假設我有數據庫表TABLE1並且有列COLUMN1。該列的變量聲明設置爲VARCHAR(20)
。此外,列值可以是NULL
或EMPTY
。從SQL變量列類型爲Varchar的表中選擇日期
假設我在該列有一些'日期'(格式12/01/2011),我需要一個查詢來檢索日期,不能是NULL
或空,並且日期過去達到一年(假設當前日期爲01/25/2012。我需要2011年1月25日之前的日期)。
請幫忙。
假設我有數據庫表TABLE1並且有列COLUMN1。該列的變量聲明設置爲VARCHAR(20)
。此外,列值可以是NULL
或EMPTY
。從SQL變量列類型爲Varchar的表中選擇日期
假設我在該列有一些'日期'(格式12/01/2011),我需要一個查詢來檢索日期,不能是NULL
或空,並且日期過去達到一年(假設當前日期爲01/25/2012。我需要2011年1月25日之前的日期)。
請幫忙。
將varchar轉換爲日期,然後處理它。
SELECT convert(date, column1) as date
from table1
where convert(date, column1) < '01/25/2011'
and date is not null and date <> ''
雖然正確(並且幾乎是唯一的選擇,如果表不是'ALTER'ed),這將使索引的使用無效(將導致表掃描)。 –
我假設我們沒有做任何DDL修改。但你絕對是對的。如果您可以更改表格模式,請執行此操作。 – user606723
爲什麼你不使用date
而不是日期的varchar,因爲你保持它的形式?如果您保存日期的YYYY-MM-DD的形式爲VARCHAR,你甚至可以使用:
SELECT * FROM table1 WHERE column1 < DATE("2011-01-01")
,但我會強烈建議您將它轉換爲日期,因爲他們使用的是類似的格式之一你爲什麼要存儲日期爲'varchar`而不是`date`提供
SELECT * FROM TABLE1 WHERE CONVERT(DATE, VC_DATE) < CONVERT(DATE,'01/25/2011')
AND LEN(VC_DATE)>0
我測試了這個使用一個小樣本,它工作正常。自己嘗試一下。 –
在DB2上至少調用'null'字段上的'LENGTH()'會導致'null'結果(當然,它也可以等同於SQLServer的'DATALENGTH()')。我不知道我對'0'長度的'null'字段(並不總是相同的東西)感到高興。 –
SELECT `COLUMN1`
FROM `TABLE1`
WHERE `COLUMN1` is NOT NULL AND
`COLUMN1` != '' AND
STR_TO_DATE(`COLUMN1`, '%m/%d/%Y') < CURRENT_DATE() - INTERVAL 1 YEAR;
? –
'update table1 set column1 = null where column1 =''; alter table table1 alter column column1 datetime null; select * from table1 where datediff(d,column1,getdate())<365;' – GSerg
@GSerg嗯......我的朋友很棘手...... :) – Kypros