2014-11-04 40 views
-1

如何從sql中獲取數據使用Date,我將日期數據類型用作varchar,我想從sql表中獲取記錄。我想獲取上個月的數據,例如今天的日期是2014年11月4日。從今天減去一個月04/10/2014所以我想按此日期搜索04/10/2014如何從sql中獲取數據使用日期

我試過這個查詢。

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
    AND OrderDate <= '04/10/2014' 

而且也是我嘗試這樣做:

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
    AND OrderDate <= (CONVERT(VARCHAR(50), '04/10/2014', 103)) 

但它也顯示在11月當月數據。如何得到這個?

+3

_「iam使用日期數據類型作爲varchar」_爲什麼? – 2014-11-04 08:49:43

+3

_i使用日期數據類型作爲varchar_爲什麼?你爲什麼不把它們放在'datetime'或'datetime2'列類型中,這正是爲了什麼? – 2014-11-04 08:49:44

+0

另外,如果您想考慮最大結束日期,爲什麼不在SQL中指定它? – 2014-11-04 08:51:31

回答

0

因爲您應該使用OrderDate作爲DateTime數據類型。但仍然回答你的問題,你需要在Datetime Datatype中投入OrderDate,並在WHERE條件中對其應用任何邏輯操作進行過濾。

所以,你的查詢將是:

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND CONVERT(DATETIME,OrderDate,103) <= CONVERT(DATETIME,'04-OCT-2014',103) 
+0

建議以'DD-MMM-YYYY'格式傳遞DateTime值,以避免DateTime轉換錯誤。 – 2014-11-04 09:01:32

+0

這對我工作很好,謝謝。 – Sarvan 2014-11-04 09:43:37

0

如果由於某種原因,您不能將列更改爲適當的數據類型,我建議將其轉換爲您的查詢的日期時間。

E.G.

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
    AND CAST(OrderDate as DateTime)<= '04/10/2014' 
1

1)如果您的訂購日期列類型爲varchar比字符串值「< =」不是一個良好的工作環境,但如果它的數據類型是日期,時間或日期時間只有「< =」,「> =」才能正常工作。所以更好地將其轉換爲日期時間並比較它。 2)如果你的起始日期和結束日期比將你的OrderDate字段轉換爲日期時間更好,然後使用「between」子句進行比較,那麼它的效果會更好。

例如,

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND (CONVERT(DATE, OrderDate) BETWEEN CONVERT(DATE, GETDATE()) AND CONVERT(DATE, '04-OCT-2014')) 
--If SQL Server 2008 or above 

--Or For below 
SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND (CONVERT(DATETIME, OrderDate) BETWEEN GETDATE() AND CONVERT(DATETIME, '04-OCT-2014')) 
相關問題