- - PR -
日付(yyyy/mm/dd hh:mi:ss)を条件にデータ抽出
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-01-14 19:40
いつも参考にさせていただいております。
SQL SERVER2000に格納されているDateTime型のフィールドに ”yyyy/mm/dd hh:mi:ss”の精度でデータが格納されています。 SQL文にてこの日付を条件指定しデータを抽出したいのですが、抽出できません。 例: 2004/01/14 17:51:15のデータに対し × SELECT * FROM <Table> WHERE (KOUSINBI = CONVERT(DATETIME, '2004/01/14 17:51:15')) △ 〜WHERE (KOUSINBI >= CONVERT(DATETIME, '2004/01/14 17:51:00')) 秒単位に格納されているデータをもとに抽出したいのですが方法を教えてください。 |
|
投稿日時: 2004-01-14 20:12
米田です。
>SQL SERVER2000に格納されているDateTime型のフィールドに >”yyyy/mm/dd hh:mi:ss”の精度でデータが格納されています。 この認識はずれています。 DateTime型はもっと細かいです。 1秒ずらしてはさんでみてください。 (範囲指定) 詳しくは Books Online で確認してください。 |
|
投稿日時: 2004-01-15 08:42
よねださん、ありがとうございます。
DateTime型=300分の1秒で格納されているんですよね。 >1秒ずらして範囲指定する という発想には行き着きませんでした。 この方法でやってみます。 |
|
投稿日時: 2004-01-15 09:48
ほむらです。
SQLServerならばConvertしなくても#で はさめば日付型になると思いましたが? WHERE KOUSINBI = #2004/01/14 17:51:00# #by うろおぼえ #個人的に使用するデータの場合、普段は文字列で格納していたりして^^;;;;; |
|
投稿日時: 2004-01-15 10:57
範囲指定でデータをとることはできました。
が、データが1秒間に数件登録されているとすると、 この日付を条件に抽出する事は不可能という事に・・ なりますかね? |
|
投稿日時: 2004-01-15 11:59
例えば、データベースに秒単位でログが記録されています。このとき、型をDateTime型とします。DateTime型は、日付とマイクロ秒の精度で成り立っているとします。
このデータテーブルから、特定の日のデータが欲しいとき、どのように問い合わせ句を組めばよいでしょう??? 1.BETWEENなどで範囲指定する BETWEEN ログ時間 FROM #2004/01/01 00:00:00# TO #2004/01/01 23:59:59# 2.文字型に変換し、一致させる TO_CHAR(ログ時間, 'YYYY/MM/DD') = '2004/01/01' #なんか、形式混ざって変ですね というように、精度を落とした文字列型に変換して一致させる、ということはできませんか?インデックスが使えなくなり、検索速度は落ちますけど。 |
|
投稿日時: 2004-01-15 17:01
ありがとうございました。
いろいろ試した結果、文字型で扱うのが解かりやすい(安定している) ということでString型として扱うこととしました。 //-------------------------------------------------------------- string st_Date = "2004/01/15 16:54:32.782"; <省略> 〜WHERE KOUSINBI = CONVERT(DATETIME,'"+ st_Date + "',121)"; //-------------------------------------------------------------- と、この様な感じで抽出できました。 ありがとうございました。 ちなみにSessionに日付型を格納したりすると、ミリ秒がなくなってしまう様でした。 (この場合でも文字型なら当然保持できます。) |
1