2017-06-21 7 views
-1

nvarcharを日付に変換する際に問題が発生しています。SQL Serverでvarcharを使用可能な日付に変換する方法はありますか?

列のタイトルは「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
  • 2009年7月2日
  • 2009年8月31日
  • 2012年9月25日
  • 2016年11月3日
  • 2008年12月3日

問題は、年が無視されるということです。

+1

ポストクエリ。 –

答えて

1

オプション1:

がテーブルに新しいdatetime型の列(のは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 

でこれを使用するには、上記のポイントを説明するためのサンプルクエリです。

UPDATEが最初あなたは、MySQLに関連したご質問をマーク。 SQL Serverの場合、あなたが代わりにSTR_To_DATEhttps://msdn.microsoft.com/en-us/library/ms187928(v=sql.90).aspx

+0

申し訳ありませんが、これはSQL Server 2016を対象としています。私は誤ってmySQLというタイトルを持っていました。 Appologies – MartyB

+0

あなたの2番目のオプションは私が探しているものです(これは読み取り専用のデータベースです)が、SQL Server用です。 – MartyB

0

パーアレン王の提案のCASTまたはCONVERTを使用することができ、私は、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 
関連する問題