2011-11-11 8 views
2

文字列として日付時刻を格納するためにセットアップされた既存のデータベースがあります(理由は何ですか?)。私は特定の日付範囲内に入力したが運がないレコードを検索する必要があります。SQL Server - 文字列として格納されたDateTimeの照会

文字列フィールドのフォーマットは1/25/2007 - 4:39 PMです。私は以下の質問を試みたが、もちろんそれは動作しません。どんな助けもありがとう。

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM 
FROM dcar 
WHERE (STATE = N'OR') AND (CAST(dcar.LASTD AS datetime) BETWEEN convert(smalldatetime, '10/01/2011', 101) AND convert(smalldatetime, '10/31/2011', 101)) 

PS - 開発者がこのように日付を保存することを決めた理由はわかりません。

答えて

1

私はあなたがそうのようREPLACE機能で日付と時刻の間にダッシュを削除する場合は、datetime型としてフィールドをキャストすることができるはずだと思う:

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM 
FROM dcar 
WHERE (STATE = N'OR') AND 
CAST(REPLACE(dcar.LASTD, ' -', '') AS DATETIME) BETWEEN '10/01/2011' AND '10/31/2011' 
+0

感謝PaulStock!それは魅力のように働いた! – user10001110101

0

実際には、保存された値の時間部分を使用していないようです。その場合、これはあなたのために動作します。

文字列操作関数(http://msdn.microsoft.com/en-us/library/ms181984.aspx)を使用して文字列の日付部分を抽出し、それをdatetimeに変換するconvert()。たとえば、CHARINDEX()を使用して " - "のインデックスを検索し、SUBSTRING()を使用してそのポイントまでの文字を取得できます。次に、convertを使用して、http://msdn.microsoft.com/en-us/library/ms187928.aspxに文書化されている適切なスタイル値を渡します。

関連する問題