2012-04-18 1 views
0
の間でクエリする

BETWEEN演算子でvarchar(形式: "2012.04")として保存された日付を選択するにはどうすればよいですか?varchar日付を

このフィールドでは、1年間の間隔を選択する必要があります。

は今、私はこれにしようとしているが、これは私のMySQLの構文エラーを与える:

SELECT DISTINCT monthcol 
FROM bo_alerts 
WHERE STR_TO_DATE(monthcol , '%Y.%m') BETWEEN 
      (STR_TO_DATE('2012.04', '%Y.%m') AND STR_TO_DATE('2011.03', '%Y.%m')) 
ORDER BY monthcol DESC 

日付が(テスト用)今静的ですが、私はBETWEENように第2の値を計算する必要がありますBETWEENセクションの最初の値に正確に-1年になります。

ありがとうございます!私は2番目よりも最初の少ないを持つほとんどのSQLの実装を満たすために、日付の順序を逆にすることを文字列比較を使用しない理由日付は、固定長文字列であるように見えることを考えると

+0

さて、私は、構文エラーのための解決策を見つけた:値の間にブラケットを必要としません。しかし、それでも私は値を返すことはありません... – VORiAND

+1

パラメータの日付を切り替えます。最初の式の間に必要な時間は秒未満です。また、日付をvarcharsとして保存していれば、日付を元に戻す必要はありません。 '2011.03 'と' 2012.04 'の間のmonthcol)' –

答えて

1

?:

SELECT DISTINCT monthcol 
FROM bo_alerts 
WHERE monthcol BETWEEN '2011.03' AND '2012.04' 
ORDER BY monthcol DESC 

はお知らせ。

+0

EPiCは私のために失敗します...そして顔面も...ただパラメタを逆にする必要があります、ありがとう!あなたは1年間の計算にもいくつかの解決策がありますか?最初の値は外に来て、このために私は-1年を計算する必要があります。私は仮定しています:varchar-> date-> date-1year-> varchar – VORiAND

+1

ネイティブデータベースの日付や時刻の型以外のものを使って日付をエンコードするスキーマは、必然的に算術演算を行うために多くの手間が必要です。おそらく、日付の算術プリミティブを直接使用できるように、テーブル構造を変更してください。これにより保守性も向上します。 – wallyk

0

Renove '.'日付から動作します。クエリ以下

試してみてください。

SELECT DISTINCT monthcol 
FROM bo_alerts 
WHERE concat(LEFT(monthcol,4),RIGHT(monthcol,2)) BETWEEN 201204 AND 201103 
ORDER BY monthcol DESC 
関連する問題