1

SQLに値を日付として読み取る方法を理解しようとしています。

私はこのような列を持つデータベースを持っています:

id  created_at
1   2010-12-16
2   2010-12-16
3   2010-12-17
4   2010-12-21
5   2010-12-23
6   2011-01-04

SQLを使用してテーブルを作成しませんでした。テキストとして生成され、SQLサーバーにインポートされました。created_atが日付であることがわかるようにクエリを作成する方法がわからないため、通常のSQLデータベースから実行できるように、「WHEREcreated_at<'2010-10-17」などの句を使用できます。 Castはここに行くルートですか?SELECT Cast(created_at as ... something?)のように、他の場所で役立つものを見つけることができませんでした。

4

2 に答える 2

3
SELECT CAST (created_at as DATETIME) 

...あなたが望む価値を与えるべきです。ただし、WHERE句の一部としてキャストすると、パフォーマンスが低下します。「created_at_date」のような別の日付固有の列をテーブルに追加して、クエリをその列にワイヤリングすることをお勧めします。

これが機能せず、キャストエラーがスローされる場合は、列の1つ以上の値が上に表示した形式と一致していないことが原因である可能性があります。NULL、空白、または単なるガベージ形式である可能性があります。あなたの最善の策は、JohnLBevanのような列を追加することです。私は、できる限り多くのことを提案し、変換しました。次に、変換されなかったアイテムを照会できます。

また、数値テーブルまたは日付テーブルの生成を検討しましたか?

于 2012-08-02T21:21:26.347 に答える
1

SQL Serverを使用している場合は、推測どおりに列を日付としてキャストできます。

select cast(created_at as date) 
from myTable

select * 
from myTable 
where cast(created_at as date) >= '2012-01-01'

ただし、テーブルをクエリするたびにそれを行う必要がありますが、これはかなり非効率的です。テーブルを再定義して、その列をデフォルトで日付型にすることをお勧めします。テーブルのDDLステートメント(テーブルを作成するためのSQL)をここに投稿できる場合は、変換コードを記述できます。または、以下のコードを使用して、作成後にテーブルを変更します。

alter table myTable 
alter column created_at date

乾杯、

JB

コメントに基づいて編集します。データ型を変更できず、それがntext列である場合は、最初に部分文字列を使用してnvarcharに変換してから、キャスト関数を使用します。

select * 
from myTable 
where cast(substring(created_at,1,10) as date) >= '2012-01-01'
于 2012-08-02T21:24:09.773 に答える