- PR -

日付(yyyy/mm/dd hh:mi:ss)を条件にデータ抽出

1
投稿者投稿内容
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 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'))

秒単位に格納されているデータをもとに抽出したいのですが方法を教えてください。
よねだ
常連さん
会議室デビュー日: 2002/10/13
投稿数: 22
投稿日時: 2004-01-14 20:12
 米田です。

>SQL SERVER2000に格納されているDateTime型のフィールドに
>”yyyy/mm/dd hh:mi:ss”の精度でデータが格納されています。
 この認識はずれています。
DateTime型はもっと細かいです。
1秒ずらしてはさんでみてください。
(範囲指定)

詳しくは Books Online で確認してください。
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 2004-01-15 08:42
よねださん、ありがとうございます。
DateTime型=300分の1秒で格納されているんですよね。
>1秒ずらして範囲指定する
という発想には行き着きませんでした。
この方法でやってみます。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-01-15 09:48
ほむらです。
SQLServerならばConvertしなくても#で はさめば日付型になると思いましたが?

WHERE KOUSINBI = #2004/01/14 17:51:00#

#by うろおぼえ
#個人的に使用するデータの場合、普段は文字列で格納していたりして^^;;;;;
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 2004-01-15 10:57
範囲指定でデータをとることはできました。

が、データが1秒間に数件登録されているとすると、
この日付を条件に抽出する事は不可能という事に・・

なりますかね?

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 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'

#なんか、形式混ざって変ですね

というように、精度を落とした文字列型に変換して一致させる、ということはできませんか?インデックスが使えなくなり、検索速度は落ちますけど。
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)