2017-06-21 91 views
-1

我有一個問題將nvarchar轉換爲日期。如何將varchar轉換爲SQL Server中的可用日期?

列標題爲'DOS',日期格式爲'05-03-2012'。

我想轉換爲一個日期,所以我可以在where子句中過濾。

我已經看到使用'CONVERT(datetime,DOS,101)'的解釋,但我不確定這會去哪裏?在選擇?在where子句中?這是將varchar轉換爲日期的最佳方法嗎?

select BedSize, avg(contributionmargin) as ContributionMargin from Summary where DOS > '06-30-2016' group by bedsize having avg(contributionmargin) > 10000 order by contributionmargin desc

在這個例子中,where子句只是看在日期的「06」,並選擇是比06更大的值,所以結果包括:

  • 07/01/2013
  • 07/02/2009
  • 2009年8月31日
  • 2012年9月25日
  • 2016年11月3日
  • 12/03/2008

的問題是,這些年來被忽略。

+1

發表您的查詢,您要使用。 –

回答

1

選項1:

添加一個新的日期時間列(讓我們假設DOSDate)表中,然後運行該查詢

update mytable set DOSDate = STR_TO_DATE(DOS,'%m-%d-%Y') 

但在mytable的未來刀片還將需要轉換並存儲在DOSDate`列。

選項2:

如果您不能添加新列,在where條款

select * from mytable where STR_TO_DATE(DOS,'%m-%d-%Y') > p_mydate 

使用這個因爲我們還沒有提供查詢,上面是一個簡單的查詢,以說明這一點。

更新

最初,您標記了與MySQL相關的問題。對於SQL Server,您可以使用CASTCONVERT而不是STR_To_DATEhttps://msdn.microsoft.com/en-us/library/ms187928(v=sql.90).aspx

+0

對不起,這是用於SQL Server 2016.我不小心把標題作爲mySQL。 Appologies – MartyB

+0

你的第二個選擇是我正在尋找的(這是一個只讀數據庫),但是對於SQL Server。 – MartyB

0

Per Allen King的建議,我能夠查看SQL Server的轉換函數。

此代碼:

select BedSize, avg(contributionmargin) as ContributionMargin 
from Summary 
where Convert(Date, DOS, 101) > '06-30-2016' 
group by bedsize 
having avg(contributionmargin) > 10000 
order by contributionmargin desc 
相關問題