2011-07-27 67 views
1

我有以下查詢:SQL服務器字符串日期轉換

SELECT o.OrderNumber, 
    cast(o.DateOrdered as datetime), 
    cast(oi.Category as varchar(max)) 

FROM Orders o 
    LEFT OUTER JOIN OrderItems oi ON oi.OrderID = o.uid 
    LEFT OUTER JOIN OrderAddresses oa ON oa.OrderID = o.uid 

WHERE O.DateOrdered LIKE '6%2011%' AND (oa.Type = '4') AND (oa.Country = 'US') 

GROUP BY cast(oi.Category as varchar(max)), cast(o.DateOrdered as datetime), o.OrderNumber 

我無法格式化datetimemm/dd/yyyy。無論我嘗試過什麼,我總是像YYYY-MM-DD 00:00:00:000一樣。我必須忽略語法中簡單的東西,並希望有人能指出我正確的方向? (SQL Server 2005)

謝謝!

回答

0

看起來DateOrdered是VARCHAR

請嘗試

SELECT o.OrderNumber, 
    CONVERT(VARCHAR(25),cast(o.DateOrdered as datetime), 101), 
    cast(oi.Category as varchar(max)) 

FROM Orders o 
    LEFT OUTER JOIN OrderItems oi ON oi.OrderID = o.uid 
    LEFT OUTER JOIN OrderAddresses oa ON oa.OrderID = o.uid 

WHERE O.DateOrdered LIKE '6%2011%' AND (oa.Type = '4') AND (oa.Country = 'US') 

GROUP BY cast(oi.Category as varchar(max)), CONVERT(VARCHAR(25),cast(o.DateOrdered as datetime), 101), o.OrderNumber 
+0

謝謝EricZ!我沒有太多的SQL工作,知道我完全忽略了這樣的事情。一旦我按照你的例子將轉換包裹在轉換中,它就解決了這個問題。 – Scott

1

嘗試的CONVERT代替CAST

CONVERT(VARCHAR(10), o.DateOrdered , 101) 

所以GROUP BY語句看起來像:

GROUP BY CAST(oi.Category as varchar(MAX)), CONVERT(VARCHAR(10), o.DateOrdered , 101), o.OrderNumber 
+0

當我嘗試這樣做早期(並再次在這裏只是要確定)我最終得到我的日期格式,而不在天零。例如,我得到6/1/2011而不是6/01/2011,所以它的訂購是關閉的。試圖通過各種格式指定(101,102等)進行調整,並且查詢返回相同的結果。有任何想法嗎?我得到的日期我們的字符串字段是一個nvarchar(50),如果這可能與它有任何關係? – Scott

+0

@Scott:我看到月份和日期字段中的0不知道可能是什麼問題..試試這個:「CONVERT(VARCHAR(10),o.DateOrdered,112)' – Chandu

+0

這個改變不會影響結果集,仍然得到沒有前導零的日期。我測試了GETDATE(),只是爲了確保它不是SQL服務器相關的格式。任何其他想法? – Scott

1

CAST只會轉換數據類型 - 但它不會給你的能力,選擇任何格式。

對於格式,你需要使用CONVERT代替(見MSDN Books Online瞭解詳細信息):

嘗試

SELECT CONVERT(VARCHAR(25), GETDATE(), 101) 

應該呈現你正在尋找的格式的當前日期。